Dialogi - skrypt Kubyzioma 30373 12

O temacie

Autor Kuba90

Zaczęty 2.04.2012 roku

Wyświetleń 30373

Odpowiedzi 12

Kuba90

Kuba90

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

Kuba90

Dialogi - skrypt Kubyzioma
2012-04-02, 14:18(Ostatnia zmiana: 2012-04-03, 11:57)
Witam chciałbym Wam pokazać jak w prosty sposób można zrobić dialogi z NPC unity.





Najpierw stworzymy tablice ze zmiennymi.Zacznijmy od Imienia Gracza i NPC
var imieg : String;
var imien : String;

Zabieramy się za stworzenie listy tematów
var tem : String; i robimy tyle ile chcemy mieć opcji dialogowych mówionych przez naszą postać

Następnie tworzymy odpwiedzi które udziela nam NPC
var odp : String;
No to mamy już kluczowe elementy dialogu czyli głowne kwestie dialogowe.Dalej tworzymy pozycję wyświetlania odpowiedzi mówionych przez NPC
var pozycja : GUIText;Tutaj tworzymy gameobject typu GUIText i umieszczamy go w odpowienim miejscu i usuwamy z niego w inspektorze napis.

Teraz tworzymy możliwośc wyboru skinu naszego GUI czyli
var skin : GUISkin;
Dalej kolejny bardzo potrzeban rzecz to pokazywanie się GUI czyli
var showGUI : boolean = false; Teraz ustawione jest ,że GUI sie nie pokaze dopuki czegoś tam nie zrobimy

Kolejna bardzo ważna zmienna to odległośc od NPC czyli
public var dist : int;
Teraz wrzucamy w skrypt samego gracza czyli
var gracz : Transform;
No i kamery dialogowe i kamere którą używa gracz.

var camg : Camera;
var camd : Camera;

Dalej przechodzimy do kolejnego etapu tworzymy funkcje która po kliknięciu w NPC z odpowiedniej odległości wyzwoli dialog
function OnMouseDown(){
if(Vector3.Distance(gracz.position, transform.position) > dist) return; ///To dystans jeżeli jest większy od podaje wartości w inspektorze nie wsyswietli się GUI
showGUI = true ; ///to pokazanie naszego GUI
 }


Dalej tworzymy nasze GUI
function OnGUI () {   //funkcja gui
if(showGUI){ // pokazanie GUI po spełnieniu warnków

Dalej tworzymy nadal w funkcji GUI zablokowanie gracza ,żeby się ruszał w dialogu oraz ustawiamy zmianę kaery na dilogową :
camg.camera.enabled = false; //wyłacza kamere gracza
camn.camera.enabled = true; //włącza kamere dialogową
gracz.transform.active = false; //i wyłącza gracz

Teraz wygląd GUI (nadal w tej samej funckji)

           GUI.skin = skin;// nasz skin

        GUI.Box (Rect (pozycja i skala),imien ); //GUI box z imieniem NPC

GUI.Box (Rect (pozycja i skala),imieg ); //GUI Box z imieniem Gracza

if(GUI.Button(Rect(pozycja i skala),tem)) //Przycisk tematu czyli naszej kwesti dialogowej
{
pozycja.text = odp; // i odpowiedz NPC
}
Robimy tyle tematów ile chcemy i do nich odpowiedzi


I przycisk kończący rozmowe
if(GUI.Button(Rect(600,540,200,20),"Koniec")) //tutaj przykładowa skala i pozycja przycisku, identycznie jest z boxami
{
pozycja.text = ""; // nie wyświetla już tekstu
gracz.transform.active = true; // uaktywnia gracza
camg.camera.enabled = true; //i jego kamere
           camn.camera.enabled = false; //wyłącza kamere dialogu
showGUI = false; //oraz GUI
}
}
}
Teksty wklejamy do inspektora w odpowienie pola , i ważne żeby tekst napisać w notatniku z ustawienim wersów jakie chcemy i kopiujemy z tamtąd tekst i wklejamy do inspektora.

A tak to wygląda w działaniu :
https://www.youtube.com/watch?v=O3FDuosmjoE


Jeżeli jakieś pytania proszę smiało pisać .
 

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1485
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
mam kilka uwag. Imię bohatera i NPCa nie powinny być polami dialogu tylko atrybutami postaci(a konkretniej skryptów doń podpiętych).

Jeśli dobrze rozumiem z każdą opcją dialogową musimy dodawać do skryptu nową zmienną string. Nie lepiej by było zrobić to powiedzmy w postaci listy stringów? Albo jeszcze lepiej listy obiektów samodzielnie stworzonej klasy która od razu miałaby listę referencji na swoje odpowiedzi(w ten sposób od razu mielibyśmy elastyczny system oraz możliwość kilkakrotnej wymiany dialogów między postaciami). Tylko nie wiem czy Unity'owy inspektor by sobie poradził z wyklikiwaniem tych wszystkich klas. Być może trzebaby wtedy sobie dokodzić odpowiednią obsługę do inspectora.

Poza tym C# jest szybszy od JavaScriptu

No ale co ja się czepiam. Gdyby sprostać moim uwagom, to to już by nie był prosty i łatwy system dialogów, a tu chodziło chyba właśnie o takie coś :)
 
Popisuje się ciągle menda jedna...

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan
Co do Twoich uwag to bym musiał pomyśleć, no ale miało być prosto i szybko, oczywiście można modyfikować skrypt dodając mu animację npc , spawn trigera który coś tam robi w npc czy graczem możliwości jest wiele.
Dalej ja umię tylko korzystać z JavaScript i dla mnie jest on jak najbardziej wygodny i jego się uczę :)  
Co do imion to wzorowałem się na wyglądzie a bardziej na układzie z Morrowinda :
http://i1191.photobucket.com/albums/z478/what_is_your_quest/A%20Look%20at%20the%20Elder%20Scrolls/Elder%20Scrolls%20-%20Morrowind/morrowind_dialogue_2.jpg

Gdzie masz podpis nazay naszego NPC w dialogu.A ,że dodałem jeszcze imię gracza , to tylko po to bo tak mi się wymyśliło.
BTW dzięki za uwagi może to jeszcze poprawię ,choć jeszcze nie wiem jak szczeże:D
 

Reverse

Reverse

Użytkownicy
posty282
Propsy49
  • Użytkownicy
Jak na razie najlepszy tutorial o Unity na forum  :ok:  .
 
Spoiler
[ramka]ANGER and FORGIVENESS | [/b]Unity3D.pl | TheGamers | NoteFun[/ramka]

NoteFun:
Spoiler
[/size]NoteFun jest już prawie gotowe!!! Jak tylko ukończymy wersję 1.0,to grę będziecie mogli znaleźć w popularnych sklepach mobilnych oraz PC.
[/b]

AaF:
Spoiler
Niedługo udostępnimy demonstracyjną, przeglądarkową wersję Anger and Forgiveness. Odbędzie się to po ukończeniu prac nad światem.
[/b][/size]



[ramka]Moje konto na p3d.in[/ramka]

Ridic530

Ridic530

Użytkownicy
posty73
Propsy3
  • Użytkownicy

Ridic530

Dialogi - skrypt Kubyzioma
#4 2012-07-30, 14:25(Ostatnia zmiana: 2012-07-30, 14:58)
Jest w unity jakaś zmienna rozdzielczości? Bo w każdej rozdzielczości gdzie indziej mi się ten dialog pokazuje...

P.S jest jakaś funkcja włączająca animację od danej klatki do danej klatki Bo mam model w wingsie i będę go animował w blenderze i animacje się zapisuje razem z plikiem..

Czyli na przykład mam 1 plik npc z animacją.fbx i mogę włączać animację? Jak tak to poproszę link funkcji bo w dokumentacji znaleźć nie mogę?!
 

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan
Dialog pokazuję się w innym miejscu w zależnośći od rozdziałki.Zasada jest dość prosta gui ma swoją skale i pozycje ale w każdej rzodziałce jest w troche innej pozcyji bo ekran ma mniej czy więcej pikseli w zasadzie możesz zrobić   Screen.width i Screen.heidth (czy jakoś tak) co ułozy gui na całym ekranie ew użyć tylko Screen.width co da ci szerokość na cały ekran i po częśći naprawi ten problem. Ja nad tym się nie zastanawiałem bo zawsze uzywam jedenj rozdziałki 1024x768 do unity.
 

Ridic530

Ridic530

Użytkownicy
posty73
Propsy3
  • Użytkownicy

Ridic530

Dialogi - skrypt Kubyzioma
#6 2012-08-01, 16:47(Ostatnia zmiana: 2012-08-27, 11:38)
Czyli są zmienne rozdzielczości!!! To teraz jest łatwiej bo można np. wyśrodkować:
Screen.width/2 - szerokość_okna / 2
Ale warto jeszcze dodać:
transform.LookAt(gracz);
 

chrismania

chrismania

Użytkownicy
posty1
Profesjabrak
  • Użytkownicy
siemka, czy mógłbyś napisać cały skrypt naraz?  
 

Kogaan

Kogaan

Użytkownicy
Yellow color.
posty561
Propsy33
ProfesjaGrafik 3D
  • Użytkownicy
  • Yellow color.
Takie pytanko jak zrobić dialog że gościu będzie sprzedawał zbroje?
 

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan
Odkop po ponad roku brawo...A sam kod ma ponad 3 lata.... Kod już tak przestarzały ,że nie ma co go używać. Wprowadzony został nowy system UI w unity więc serdecznie polecam  się z nim zapoznać. A jak zrobić sprzedaż ?? nie jest to trudne : NPC sprawdza czy masz w swoim eq odpowiednią ilość złota warunkiem : if(ilość naszego złota=>wartości zakupu){sprzedaj;} Umieszczasz to w odpowiednim miejscu w kodzie i gra huczy.

Pozdrawiam. A jak potrzebujesz więcej pomocy zapraszam na forum uni3d.pl/forum albo załóż temat na TM w odpowiednim dziale.
 

Kogaan

Kogaan

Użytkownicy
Yellow color.
posty561
Propsy33
ProfesjaGrafik 3D
  • Użytkownicy
  • Yellow color.
A mugłbyś pokazać jak by to miało wyglądać w pliku?
 

Kuba90

Kuba90

Użytkownicy
JunityMan
posty226
Propsy93
Profesjabrak
  • Użytkownicy
  • JunityMan
Nie MÓGŁBYM ,ponieważ chcesz gotowca a z niego nic się nie nauczysz. Podałem Ci łopatologicznie warunek co i jak ma się dziać żeby nastąpił handel. Ale po kolei:
1) if(ilość naszego złota=>  czyli musisz sprawdzić ilość złota potrzebną do zakupu, najlepiej jak skorzystasz z tego :
http://docs.unity3d.com/ScriptReference/GameObject.GetComponent.html czyli tworzysz sobie wcześniej zmienną z ilością złota np inta i pobierasz do niej aktualny stan złota z EQ

2)=>wartości zakupu    tutaj prosta sprawa i nic nie musze tłumaczyć - kolejna zmienna z wartością tym razem zakupu.

3) {sprzedaj;} i dodanie przedmiotu do eq. Tutaj musisz dodać informację w swoim skrypcie z EQ ,że obiekt został dodany np odblokować go czy jak tam to widzisz. To już Twoja w tym głowa, po za tym w wujku google i cioci yt znajdziesz pełno poradników gdzie ludzie dokładnie krok po kroku tłumaczą.




 

Kogaan

Kogaan

Użytkownicy
Yellow color.
posty561
Propsy33
ProfesjaGrafik 3D
  • Użytkownicy
  • Yellow color.
 


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