Developing > Unity

Dialog > Misja

(1/1)

Kuba90:
Modyfikując wcześniejszy skrypt dialogowy zaczynamy tworzenie misji.Skrypt polega na "cyferkach" czyli jeżeli coś = 1 to akcja1 ipt....


--- Kod: --- 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;
--- Koniec kodu ---

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


--- Kod: ---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;
 }
--- Koniec kodu ---

Teraz tworzymy dialogi misji:


--- Kod: ---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";
         }
}


--- Koniec kodu ---


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:
Czy tablice są ci obce? Po co robisz kilka zmiennych m0, ..., m3 jak można zrobić tablicę z czterema elementami.


--- Kod: ---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;
             }
--- Koniec kodu ---
Zamiast czegoś takiego, lepiej użyć jakiejś metody:

--- Kod: ---private metoda_m(boolean m)
{
   //tu kod
}

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

--- Koniec 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.  

--- Kod: --- var Tem10 : String;
 var odp10 : String;
--- Koniec kodu ---
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).


--- Kod: ---GUI.Box (Rect (200,420,400,300),imie );
     GUI.Box (Rect (600,420,200,300),imieg );
--- Koniec kodu ---
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:
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ć.

Nawigacja

[0] Indeks wiadomości

Idź do wersji pełnej