Dialog > Misja 3909 2

O temacie

Autor Kuba90

Zaczęty 11.05.2012 roku

Wyświetleń 3909

Odpowiedzi 2

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan

Kuba90

Dialog > Misja
2012-05-11, 15:25(Ostatnia zmiana: 2012-05-12, 07:45)
Modyfikując wcześniejszy skrypt dialogowy zaczynamy tworzenie misji.Skrypt polega na "cyferkach" czyli jeżeli coś = 1 to akcja1 ipt....

var misja : String = "0";
 var m0 : boolean = false; //kwestia dialogowa etapu misji
 var m1 : boolean = false; //kwestia dialogowa etapu misji
 var m2 : boolean = false; //kwestia dialogowa etapu misji
 var m3 : boolean = false; //kwestia dialogowa etapu misji
//////cała reszta jak w skrypcie dialogowym.
 public var dist : int;
 var gracz : Transform;
 var gcam : Camera;    
 var ncam : Camera;
 var skin : GUISkin;
 var pozycja : GUIText;
 var imie : String;
 var imieg : String;

 var Tem10 : String;
 var odp10 : String;

 var Tem11 : String;
 var odp11 : String;

 var Tem12 : String;
 var odp12 : String;

 var Tem13 : String;
 var odp13 : String;

Następnie tworzymy funkcję wywołania misji oraz ogólny plan misji :

function OnMouseDown(){
//////to plan misji, każe skryptowy pokazać odpowiednie kwestie dialogowe zgodne z postepem misji

             if(misja == "0")
             {
             m0 = true;
             m1 = false;
             m2 = false;
             m3 = false;
             }
             
             if(misja == "1")
             {
             m0 = false;
             m1 = true;
             m2 = false;
             m3 = false;
             }
             
             if(misja == "2")
             {
             m0 = false;
             m1 = false;
             m2 = true;
             m3 = false;
             }
             
             if(misja == "3")
             {
             m0 = false;
             m1 = false;
             m2 = false;
             m3 = true;
             }
/////dystans w którym włączy się dialog            
             if(Vector3.Distance(gracz.position, transform.position) > dist) return;
 }

Teraz tworzymy dialogi misji:

function OnGUI(){
/////wszystkie m0,m1.. to poszczególne etapy misji .\
 if(m0){
     gcam.camera.enabled = false;
     ncam.camera.enabled = true;
     gracz.transform.active = false;
     GUI.skin = skin;
     GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
     if(GUI.Button(Rect(600,450,200,20),Tem10))
         {
         pozycja.text = odp10;
         }
     if(GUI.Button(Rect(600,540,200,20),"Tak wykonam misję"))
         {
         pozycja.text = "";
         gracz.transform.active = true;
         gcam.camera.enabled = true;
         ncam.camera.enabled = false;
         m0 = false;
         misja = "1"; ///dodanie postępu misji co za tym idzie zmiana kwesti dialogowych odpowednichh dla etapu mijsi
         }
}

 if(m1){
     gcam.camera.enabled = false;
     ncam.camera.enabled = true;
     gracz.transform.active = false;
     GUI.skin = skin;
     GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
     if(GUI.Button(Rect(600,450,200,20),Tem11))
         {
         pozycja.text = odp11;
         }
     if(GUI.Button(Rect(600,540,200,20),"Koniec"))
         {
         pozycja.text = "";
         gracz.transform.active = true;
         gcam.camera.enabled = true;
         ncam.camera.enabled = false;
         m1 = false;
///tutaj potrzebny jest inny skrypt który np po pokonaniu wroga poszuka naszego npc i doda do zmiennej misja odpowiednią cyferkę czy znaczek czy coś tam....
         }
}

 if(m2){
     gcam.camera.enabled = false;
     ncam.camera.enabled = true;
     gracz.transform.active = false;
     GUI.skin = skin;
     GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
     if(GUI.Button(Rect(600,450,200,20),Tem12))
         {
         pozycja.text = odp12;
         }
     if(GUI.Button(Rect(600,540,200,20),"Zakończ misję"))
         {
         pozycja.text = "";
         gracz.transform.active = true;
         gcam.camera.enabled = true;
         ncam.camera.enabled = false;
         m2 = false;
         misja = "3";
         }
}

 if(m3){
     gcam.camera.enabled = false;
     ncam.camera.enabled = true;
     gracz.transform.active = false;
     GUI.skin = skin;
     GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
     if(GUI.Button(Rect(600,450,200,20),Tem13))
         {
         pozycja.text = odp13;
         }
}
     if(GUI.Button(Rect(600,540,200,20),"Koniec"))
         {
         pozycja.text = "";
         gracz.transform.active = true;
         gcam.camera.enabled = true;
         ncam.camera.enabled = false;
         m3 = false;
         misja = "4";
         }
}



Rezultat:
http://dl.dropbox.com/u/25345874/misja%20and%20shaows%20test/WebPlayer.html
Dialogi są tutaj tak epickie ,że masakra.Również grafiką zabijam xD :D
 

Adanos

Adanos

Administrator
Szara eminencja
posty5204
Propsy3870
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Czy tablice są ci obce? Po co robisz kilka zmiennych m0, ..., m3 jak można zrobić tablicę z czterema elementami.

if(misja == "0")
             {
             m0 = true;
             m1 = false;
             m2 = false;
             m3 = false;
             }
             
             if(misja == "1")
             {
             m0 = false;
             m1 = true;
             m2 = false;
             m3 = false;
             }
             
             if(misja == "2")
             {
             m0 = false;
             m1 = false;
             m2 = true;
             m3 = false;
             }
             
             if(misja == "3")
             {
             m0 = false;
             m1 = false;
             m2 = false;
             m3 = true;
             }
Zamiast czegoś takiego, lepiej użyć jakiejś metody:
private metoda_m(boolean m)
{
   //tu kod
}

//i użyć
if(misja == "0")
{
   metoda_m(m1);
}
//tu reszta kodu

I podobnie w innych miejscach można poupraszczać. Zwiększa to przede wszystkim czytelność kodu i ułatwia poprawianie ewentualnych błędów.

Jeśli piszesz nazwy zmiennych, to pisz je z małej litery. Nie możesz raz pisać z wielkiej, raz z małej.  
var Tem10 : String;
 var odp10 : String;
Staraj się unikać skrótów. Są one niejednoznaczne. Co znaczy Tem10? Temperaturę o 10 stopniach, czy zmienną tymczasową temporary 10? No i, nazywaj zmienne, funkcje i metody w jednym języku (może być to jak najbardziej język polski).

GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
Dobrze by było, żebyś zrobił sobie gdzieś odpowiednie stałe do rozmiarów okna. Później nie będziesz musiał wielokrotnie zmieniać tej samej wartości, wystarczy tylko w jednym miejscu zmienić odpowiednią wartość ;)

To tyle uwag, które rzuciły mi się w oczy.

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan
Dzięki za rady:) Wezme się za pokombinowanie z tym. Teraz widzę, że jest niezły bałagan w skrypcie choć przyznam ,że się cieszyłem bo działa jak ma:), no ale co jak co można go jeszcze poprawić.
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry