Tip:
Highlight text to annotate it
X
Hallo und herzlich willkommen zu meinem zweiten Skripting Tutorial!
Wir werden heute unseren ersten Dialog erstellen. Und zwar möchte ich um diesen Dialog zu erstellen
so eine kleine Quest aufbauen. Wir haben ja noch von unserem letzten Tutorial den Hans,
der hier spawnen wird, und der soll uns dann fragen, ob wir ihm helfen können, er möchte
nämlich ein Date mit der Emma haben. Und die Emma wird dann hier sitzen, mit der kann
man dann entsprechend reden. Okay, bevor wir einen Dialog machen können,
also man muss es nicht unbedingt machen, aber es empfiehlt sich immer zuerst die Voicetags
rauszusuchen. Ein Voicetag ist quasi eine Bezeichnung eines Npcs bzw. eines Sprecher
die dann letztendlich mit dem Npc verbunden wird, damit man weiß, dieser Npc sagt z.B.
etwas. Also ich kann jetzt z.B. sagen, der Voicetag
vom Hans soll dann später die Dialogzeile sagen "Kannst du mir helfen".
Für den Voicetag brauchen wir das Npc-Skript. Ich habe hier übrigens noch das Emma-Skript
hinzugefügt, ganz wie im ersten Tutorial. Und um den Voicetag zu erhalten von unserem
Hans, Doppelklick auf das Entity Template von dem Hans und dann laden wir wieder hier,
das kennt ihr ja schon. Und jetzt machen wir die Eigenschaften rechts
unten etwas größer und hier gibts ja verschiedene Tabs und einer davon heißt Voicetags und
da klicken wir jetzt drauf. So, hier habt ihr ja einige Voicetags zur
Verfügung aber noch gar keines ist irgendwie mit ner Appearance verbunden. Und hier könnt
ihr jetzt z.B. sagen, ich möchte das Voicetag 'CITIZEN POOR FLOTSAM 01' benutzen. Und dann
könntet ihr hier auf die entsprechende Appearance klicken (also wo noch None steht) und dann
eine auswählen. Und dann wäre dieser Voicetag mit dieser Appearance die wir hier benutzen
verbunden. Es ist jetzt allerdings so, wir haben ja einen
ganz bestimmen NPC nämlich den Hans. Und ich möchte ungerne für den Hans ein Voicetag
benutzen das 'CITIZEN POOR FLOTSAM 01' heißt, was ich auf jeden Fall immer wieder vergessen
werde und was ich jedes Mal neu nachschlagen muss.
Also mache ich das jetzt anders, ich lege nämlich einen eigenen Voicetag an. Und dafür
müssen wir in den Assetbrowser und jetzt in einen ganz besonderen Ordner, nämlich
\globals\scenes. Und hier sind so ein paar Arrays und hier gibts u.a. auch scene_voice_tags.
Da mache ich jetzt einen Doppeklick drauf und dann kommen ganz viele Voicetags. Ich
hab die jetzt schon etwas gefüllt, also ich glaub die dürfte erst bei ADAM PANGRATT bei
euch anfangen. Und hier könnt ihr auch eure eigenen Voicetags
einfügen. Neue Voicetags mache ich immer an den Anfang, ich habe schon einen für Emma
vorbereitet. Ich mache jetzt Rechtsklick -> Insert Row und dann komme ich auch direkt in die
erste Zeile und ich jetzt trage hier als Voicetag 'Hans' ein. Das könnte auch eine lange Bezeichnung
sein wie 'Hans our main npc', aber ich denke wenn ich hier Hans eintrage ist klar, was
gemeint ist. Ihr müsst noch das Geschlecht eintragen,
ich weiß allerdings gar nicht ob sich das auswirkt, aber CD Project hat das immer gemacht.
Und noch ganz wichtig ist hier eine ID, die müsst ihr wirklich immer eintragen und die
musst eindeutig sein. Also kein Voicetag darf eine ID zweifach verwendet. Ich habe jetzt
allerdings auch nie geprüft, ob meine eigenen Voicetags mit den originalen überschneide.
Die ID besteht immer aus vier Buchstaben und ich hab eigentlich noch nicht erlebt, dass
ich mit dem Original kollidiert bin. Ich schreib jetzt einfach mal HANS als ID auch hin, das
sind halt vier Buchstaben und passt doch eigentlich wunderbar.
Hier gibts noch zwei Spalten 'Pitch' und 'Template'. Template hat auch CD Project nie genutzt,
deswegen weiß ich auch nicht warum es das gibt. Pitch ist, wenn der Sprecher des Voicetags
in der Tonhöhe verändert werden soll, das ist halt pitchen. Ich glaube das ist ne Angabe
in Prozent. Wenn ihr also eine Angabe über 100 schreibt, werden die Sprachaufnahmen etwas
höher abgespielt, als hätten die Sprecher gerade Helium eingenommen. Oder wenn der Wert
kleiner als 100 ist, dann wird die Stimme halt etwas tiefer.
So, wir haben jetzt unseren Voicetag hier angelegt, speichern. Jetzt können wir das
Fenster schließen. Und jetzt mache ich hier bei den Voicetags
ein neues hin und zwar an den Anfang - das ist ganz wichtig! Also, nicht unbedingt wichtig,
wenn ihr kein anderes benutzt habt, aber da ich hier schon was eingetragen hab - das erste
Voicetag was genommen wird, das gewinnt. Und hier fehlt jetzt natürlich noch der Hans,
deswegen muss ich die Datei neu öffnen. So, jetzt habe ich die Datei neu geöffnet,
nochmal zu den Voicetags und jetzt kann ich auch den Hans auswählen. Also, ich habe ein
neues Element mit 'Insert before' eingefügt, dann wähle ich hier den Voicetag HANS aus
und die Appearance dafür. Save und dann wird jetzt auch immer HANS als Voicetag genutzt.
Ihr könnt jetzt allerdings auch nicht mehr CITIZEN POOR FLOTSAM 01 als Voicetag benutzen,
das wird dann einfach nicht funktionieren. Ich könnte das jetzt hier auch einfach löschen,
aber ich lösche ungerne Dinge. :) Speichern. Jetzt gehen wir in den Dialog,
ich hab dafür in den Quests einen eigenen Ordner für diese Quest angelegt: date_with_emma.
Ich hab auch schon den Dialog mit der Emma vorbereitet, der ist aber ganz simpel und
ich werd euch jetzt zeigen, wie man den Dialog mit dem Hans macht und dann werdet ihr auch
verstehen, wie der von Emma funktioniert. Rechtsklick -> Create -> Scene script. Scenes
sind halt das was die Dialoge sind. Ich nenne den jetzt dia_with_hans, ganz simpel.
Doppelklick und dann öffnet sich dieser Scene Editor.
Der besteht eigentlich aus drei Hauptteilen die interessant sind. Ganz unten, da sind
die Elemente, das kennt ihr vielleicht noch aus dem Startup-Skript. Die kann man anordnen
wie sich dieser Dialog verhalten soll. Er beginnt wenn man durch das Input in diese
Datei kommt und der Dialog wird auf jeden Fall immer enden, wenn man ihn durch diesen
Output hier verlässt. Wenn ich jetzt eins dieser Elemente markiert
sehe ich auch links oben sind verschiedene Eigenschaften des aktuell markierten Blocks
und rechts oben wird sich dann der Dialog und all die Texte des Dialogs befinden.
Okay, jetzt komm ich mal zum neuen Dialog. Den kann man über zwei Wege machen - zum
einen links oben ist "Add aection", da kann man einen neuen "Teildialog", also eine Sektion,
einfügen. Oder ihr könntet auch unten in diesem grau-braunen Rechtsklick und auch "Add
section" machen, das ist das gleiche. So, jetzt klick ich mal da drauf und dann
passiert auch rechts oben etwas. Hier steht irgendwie Section name und dann muss man dieser
Section einen Namen geben, da das der Beginn meines Dialogs sein wird nenne ich den immer
ganz gerne Start. Mit [Enter] komme ich dann auch weiter und kann diesen Dialog quasi beginnen.
Was soll denn jetzt passieren... Erstmal muss man das Voicetag des entsprechenden Sprechers
angeben. Der des Helden ist eigentlich immer Gerald, das könnt ihr zwar auch unändern,
aber das ist etwas tricky, deswegen verzichte ich da eigentlich immer drauf. Jetzt soll
Gerald sagen: "Kann ich ... ". Oh, ich muss ja in Englisch schreiben. "Can I help you?"
Und dann sagt der Hans... Das ist jetzt auch schön, wenn ich das Voicetag 'CITIZEN POOR
FLOTSAM 01' hätte müsste ich ewig suchen, wo ist dieser CITIZEN POOR FLOTSAM 01 und
dann scrolle ich vielleicht nochmal drüber, das muss man halt jetzt nicht machen, weil
wir ja den kurzen HANS Voicetag haben, deswegen habe ich das gemacht.
Und jetzt wissen wir auch immer genau welcher Npc spricht und müssen nicht immer überleben,
wer dieser CITIZEN POOR FLOTSAM 01 ist. Alles klar, der Hans sagt dann: "Can you ask
Emma for a date?" Also ganz simpel, ihr könnt das natürlich
auch schön ausschmücken. Und jetzt wäre es doch eigentlich ganz cool,
wenn ich dem Spieler die Wahl lassen würde. Und dafür könnt ihr auf den Sectionname
Rechtsklick machen, dann "Add Element", dann könnt ihr auch verschiedene Dinge einfügen,
ihr werdet allerdings immer die Choice auswählen. Und dann kommt halt am Ende dieser Sektion
eine Choice, da könnt ihr dann verschiedene Auswahlmöglichkeiten für den Spieler eintragen.
"Yes, I can do that" oder "No, I won't". Also, ganz einfach, und jetzt hat sich auch
hier unten das Start-Element verändert. Was sein kann, ist dass ihr dieses Startelement
aktuell nicht sehen könnt. Das passiert relativ oft eigentlich, ich bin jetzt erstaun, dass
es direkt funktioniert hat. In diesem Fall in das grau-braune Fenster klicken und rausscrollen.
Was nämlich ganz oft passiert, ich zeig das mal, das irgendwie der Dialog hier im Nimmerleinsland
erstellt wird und dann habt ihr nur dieses und müsst ihr immer doof rausscrollen und
euch den Dialog raussuchen und nach unten schieben. Also mit linker Maustaste könnt
ihr diesen Block einfach verschieden und wieder reinscrollen.
Alles klar, ich verbinde jetzt auch schon mal den input mit dem Start, halt dann wird
wenn man diesen Dialog startet der Kontrollfluss aus dem Input in diesen Start gehen. Dann werden diese zwei Dialogzeilen
abgearbeitet und es kommt dann diese Auswahl für den Spieler.
Okay, jetzt musst ich noch zwei Sections erstellen, zum einen das "Yes", also ihr könnt die wirklich
benennen wie ihr lustig seid. "Yes, I will" oder eben "No, I won't". Und dann ist der
Hans noch beleidigt: "*** off" und dann muss man gehen.
Ich hatte jetzt wieder Glück, dass die hier so gut eingefügt wurden. Jetzt platzier ich
die halt so, dass ich die vernünftig mit den Boxen verbinden kann. Und ihr seht schon,
das kann man jetzt von links nach rechts wie ein Buch lesen. Also in dem Input beginnt
es und dann fließt es von links nach rechts. Doof ist halt, wenn die teilweise zurückfließen
müssen. Das ist dann teilweise nicht ganz so schön gestaltet, aber das habt ihr hier
noch gar nicht. Okay. Jetzt habe ich allerdings zwei Möglichkeiten
diesen Dialog zu beenden. Ich könnte in der Theorie sagen, ich verbinde auch diesen "NO"
mit diesem Output, aber das mach ich aus einem ganz bestimmten Grund nicht, weil wenn ich
diesen Dialog beende, dann möchte ich halt zwei Konsequenzen zur Folge haben.
Entweder man kann mit der Emma reden und um dieses Date bitten oder eben auch nicht. Und
das kann man durch verschiedene Wege erreichen, ich mach das jetzt einfach indem ich zwei
Output-Kästen habe. Der eine, ich markier den jetzt, und benenne den jetzt "Ask for
a date". Okay, mit [Enter] bestätige ich das. Und jetzt mache ich noch einen weiteren
Output, unten in diesem grau-braunen Rechtsklick und dann Output.
Das benenne ich "No date". Und dann fließt auch dieses "No" in diesen Output. Und dann
kann ich das quasi nachher ganz einfach nachvollziehen, welche Option ich genommen habe. Ihr werdet
das auch gleich noch sehen, wenn ich den Dialog austeste.
Immer speichern. Das Speichern kann bei größeren Dialogen echt lange dauern, also ich sitze
da bei meinen großen Dialog manchmal wirklich 10-20 Sekunden dran bis es gespeihert ist
und man kann in der Zwischenzeit leider auch nichts machen.
Der Dialog ist leider noch nicht ganz fertig. Ihr müsst nämlich oben, es gibt so verschiedene
Tabs: Scene script, Starting Conditions, Actors definitions und Dialogset settings. Da müsst
ihr noch den Hans als zusätzlichen Dialogpartner definieren. Ich finde das auch etwas blöd,
man hat ja schon den Voicetag angegeben, warum muss man jetzt noch einen Actor definieren?
Ist halt so. Das müsst ihr jetzt Rechtsklick -> Add Element
machen. Da müsst ihr ausnahmsweise nicht überall noch die grauen Felder hinzufügen
sondern nur auswählen. Voicetag ist HANS. Actor tag, der Tag von unserem NPC, den haben
wir letztes Mal festgelegt, das ist hans. Das Actor template müssen wir noch über
das Visual von dem Npc, also das Entity Template, festlegen. Das müssen wir dann im Asset Browser
markieren und fügen das dann mit dem grünen Pfeil wieder ein.
Und jetzt müsste das auch schon funktionieren. Starting condition hab ich noch nie gebraucht,
deshalb braucht ihr das erstmal auch nicht. Und in Dialogset settings könnt ihr nochmal
alles überprüfen. Was manchmal ganz sinnvoll ist, ist ein Pivot Element festzulegen. Das
ist quasi für die Kameraausrichtung, an welchen Npc sich die Kamera orientieren soll. Deswegen sage
ich da ganz oft, dass der Held, also der Gerald, das Pivot-Element sein soll. Speichern.
Man kann jetzt noch was an den Kameraeinstellungen ändern, das werde ich in diesem Dialog der
Einfachheit halber wieder nicht machen. Okay, jetzt bin ich mit diesem Dialog fertig.
Der muss jetzt allerdings erst wieder aufgerufen werden. Ich könnte das in dieses Startupskript
reinmachen, aber ich empfehle euch das immer ganz sauber zu machen.
Wir haben eine eigene Quest, also legen wir dafür auch wirklich eine Quest an. Wir gehen
wieder in den Questordner "date_with_emma" und machen da Rechtsklick -> Create -> Create.
Wie nennen wir die denn? Joa, "date_with_emma". Doppelklick und dann kommen wir wieder in
dieses Fenster, das kennt ihr ja noch vom letzten Mal. Erstmal Komplexitätsmanagement,
Start und End. Das habt ihr ja schon letztes Mal gemacht.
Und jetzt müssen wir noch irgendwie unseren Dialog einfügen und das machen wir über
Rechtsklick -> Scenes. Da gibt es irgendwie vier Dialogoptionen, ihr werdet aber eigentlich
nur erstmal den Interaction dialog oder die Scene auswählen. Die beiden unterscheiden
sich insofern: Die Scene startet immer automatisch. Und bei dem Interaction Dialog müsst ihr
noch den Npc entsprechend ansprechen. Und genau das möchte ich jetzt mal. Deswegen
wähle ich jetzt den Interaction Dialog. Und dann müsst ihr hier noch die Eigenschaften
füllen, zum einen die Actor tags. Ach, was ich übrigens eben vergessen hab:
Den Gerald müsst ihr nicht als Actor definieren. Der ist automatisch immer in einem Dialog
drin. Deswegen muss ich hier auch nur den Hans angeben.
Und entsprechend die Scene, die hab ich jetzt natürlich nicht mehr markiert, deshalb wählen
wir die wieder im Asset Browser aus und fügen die über den grünen Pfeil hier ein.
Jetzt hat sich das auch upgedatet. Wenn sich das übrigens nicht updatet, kann man das
im Zweifelsfall über Rechtsklick -> Update to new version machen.
So, jetzt sage ich einfach mal, wenn diese Quest beginnt, verbinde ich das mit dem Interaction
dialog und dann kann man quasi den Hans ansprechen und wenn man den dann anspricht wird dieser
Dialog losgehen. Wir können hier auch sehen, es gibt zwei
Endpunkte aus diesem Dialog und ich kann entsprechend genau die behandeln wie ich möchte. Wenn
man also sagt "No date", dann ist die Quest auf jeden Fall beendet. Wenn man jetzt allerdings
"Ask for a date" hat, kommt noch ein weiterer Dialog dazu, nämlich der mit Emma.
Den habe ich jetzt schon vorbereitet. Das ist dia_with_emma und dann habe ich hier
den Dialog jetzt mit Emma ausgewählt und der ist ganz einfach, die sagt dann einfach,
die will mit dem ein Date haben. Okay, dann verbinde ich das und wenn man dann mit Emma
gesprochen hat, dann ist diese Quest auch vorbei.
Dann nehmen wir jetzt einfach mal an, man muss nicht zurück zu dem Hans laufen. Das
könnt ihr alles gerne machen, halt jetzt fürs Tutorial mache ich das einfach mal nicht.
Okay, speichern. Und wir erinnern uns auch noch ans letzte
Mal: Diese Quests werden nicht automatisch ausgeführt. Deshalb mache ich jetzt wieder
eine Entity Template für diese Quest (ihr erinnert euch noch ans letzte Mal). "date_with_emma_entity"
nenne ich das, Doppelklick. Das mache ich jetzt ganz schnell, nur zur kurzen Wiederholung.
Hier Rechtsklick, da braucht ihr CQuestComponent. Da gebt ihr hier entsprechend die Quest an.
Speichern und das wars. Dann müsst ihr halt dieses Entitytemplate
noch in diesen startup_layer einfügen und einfach reinziehen und dann wird diese Quest
auch direkt gestartet. Und jetzt kommt das schönste oder auch nicht, wie komplex eine
Quest ist kann das nämlich auch total beschissen sein, das Testen.
Alles klar, laufen wir mal zu dem Hans und hoffentlich funktionierts.
Ich hab jetzt schonmal ne Auswahl, das sieht gut aus.
Can I help you? Can you ask Emma for a date with me?
Jetzt hab ich hier die Auswahl, "No I won't" dann würde ich jetzt gar nichts machen können,
"Yes I can do that" oder "Yes I will". Und jetzt kann man zur Emma gehen. Ah, hier
sieht man, ich hab der Emma gar keinen Displayname gegeben, ist vielleicht auch mal ganz gut
zu sehen. Und jetzt fragt Gerald halt sie, ob sie mit
ihm, ob sie mit Hans auf ein Date gehen will und "Yeah, why not".
Okay, was ich jetzt noch ganz kurz zeige: Wir hatten ja jetzt einen Interaction dialog.
Ich werde das jetzt noch ganz kurz variieren. Ich sage jetzt einfach mal ich lösche den
Interaction dialog und mache stattdessen eine Scene rein. Dann wähle ich entsprechend den
Dialog mit dem Hans wieder im AssetBrowser aus, mache hier den grünen Pfeil und das
funktioniert dann auch alles, ich muss hier auch keinen actor angeben, warum auch immer.
Okay, jetzt kam auch das Update. Verbindung mit Start und auch all die anderen
Verbindungen. Okay, speichern.
Was halt jetzt passieren wird, wenn ich das Spiel starte, wird dieser Dialog direkt beginnen.
Und jetzt kann ich auch mal "No, I won't" angeben, dann sagt er mir "*** off".
Hoffentlich bewegt er sich, ja, er bewegt sich in seine Hütte, sehr gut.
Und jetzt kann ich auch nicht mit der Emma sprechen.
Alles klar, das waren unseren ersten zwei simplen Dialoge, oder euer erster simpler
Dialog. Das ist jetzt natürlich noch nicht wirklich viel, ich werde euch wahrscheinlich
im nächsten Dialog zeigen, wie man mehr Kompexlität in eure Dialoge bringt könnt.
Ihr habt ja jetzt immerhin ne Choice und ihr könnt die auch irgendwie verknüpfen. Jetzt
fehlen euch aber z.B. Wiederholung in Dialogen. Das kommt beim nächsten Mal. Ich hoffe es
hat euch Spaß gemacht, ihr habt was gelernt und wir sehen uns beim nächsten Mal. :)