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
Idź do wersji pełnej