Acest tutorial va arăta cititorului cum să personalizeze pachetele (structuri de date care controlează comportamentul actorului) pentru ca actorul să-l facă să se miște în întreaga lume.
- Cum funcționează pachetele
- Cum se creează un simplu program zilnic pentru NPC
- Cum se creează un nou pachet
Un pachet este un termen folosit în Creation Kit pentru o structură de date care controlează comportamentul unui actor. La un moment dat, actorul poate efectua simultan unul și numai un singur pachet, care spune actorul ce să facă - somn, mânca, rătăcesc în jurul valorii, urmați traseul de patrulare, munca în forjă, și altele.
Deci, unde știe actorul ce pachet ar trebui să înceapă să execute la un moment dat? Aici vine ajutorul pachetului Stack. Ideea de bază este că fiecare actor are o mulțime de pachete pe care le poate executa. Jocul începe periodic pachetele pe listă, începând cu pachetul situat în partea de sus a stivei, și verifică fiecare pachet la un moment dat pentru a determina care una dintre ele corespunde condițiilor specificate într-un timp dat. Un pachet este valabil dacă:
- Condițiile sale sunt definite ca fiind adevărate și
- Ora curentă a zilei se încadrează în limitele specificate în programul său.
Actorul execută întotdeauna primul pachet de potrivire din stivă. Actorii localizați în apropierea playerului își vor revizui foarte des stackul de pachete; actorii din zona descărcată a lumii jocurilor, respectiv, mai rar.
Deci, să vedem cum funcționează aceste idei în practică, dă-i unui vechi prieten Benda Olo un program. (Completați tutorialul cu privire la crearea actorului înainte de a porni.)
Deschideți GSQBenduOlo și accesați fila AI Packages, care în acest moment arată astfel:
Din moment ce nu are niciun pachet pe listă, el va rămâne pe loc toată ziua. Deci, hai să-l facem să facă ceva să-l facă să arate mai mult ca o ființă umană.
Pentru a adăuga pachete actorului, aveți posibilitatea să faceți clic dreapta pe lista AI Package List și selectați „Adăugați“, sau trageți la lista de pachetul dorit din fereastra Window obiect. Să facem ultima opțiune - faceți clic pe Pachetul din lista de obiecte (localizată în secțiunea Caractere). Defilați la pachetele care încep cu "Implicit". (Aceasta este convenția de numire pe care o folosim pentru a se referi la pachetele care nu sunt legate de anumite locuri din lume și astfel pot fi folosite de orice actor.)
Putem crea un program simplu pentru Bend folosind aceste pachete gata făcute. Deci, să-l informăm că vrem ca el să ia micul dejun și cina la domiciliu, să doarmă noaptea sau să stea în jurul casei.
Pentru produsele alimentare, să vedem implicit existente „mananca“ (mânca) pachete - ia DefaultEatEditorLoc8x1 (mic dejun) și DefaultEatEditorLoc18x1 (cina). Notă: Folosim convenția de denumire a pachetelor pentru a indica care dintre ele au un program: "TIME-TIME-DURATION". Prin urmare, "8x1" indică faptul că pachetul va fi lansat la ora 8 dimineața și va dura o oră; "18x1" indică faptul că pachetul va fi lansat la ora 18:00 și va dura, de asemenea, o oră. Dar, bineînțeles, denumirea poate fi greșită - să verificăm datele reale din pachete pentru a ne asigura că orarele lor se potrivesc cu numele lor. 1 oră în joc durează 3 minute de timp real (20 de minute ale jocului sunt 1 minut real, 24 de ore echivalente cu 72 de minute în timp real).
Acum, deschideți ambele pachete și accesați filele Schedule care arată astfel:
Numele lor nu mint - aceste pachete sunt valabile pentru timpul pe care ne-am asteptat. Mare, acum le vom adăuga la lista de pachete Bendu Olo, care va arăta astfel:
Acum, așa cum am discutat mai devreme, în lista legămintelor este importantă ordinea, astfel ca actor păstrează întotdeauna pachet satisfăcătoare din lista de testat de sus - în jos. În ceea ce privește cele două pachete, acest lucru nu contează aici, deoarece acestea nu pot satisface condițiile în același timp - dacă timpul este între 8 și 9 dimineața, pachetul DefaultEatEditorLoc8x1 este valabil; dacă între 6 și 7 pm, atunci DefaultEatEditorLoc18x1 este valabil; în alte momente nici acesta, nici alt pachet nu va acționa. Ordinea pachetelor în acest caz nu contează. Dar aveți grijă - vom adăuga următorul pachet pe lista de Bendu Olo, iar deja aici ordinul va juca un rol decisiv pentru ca programul său să funcționeze corect.
Am spus că vrem să-l să doarmă noaptea trecută, așa că hai să găsim pachetul este responsabil pentru somn în lista de pachete care începe cu „default“ - ia pachetul DefaultSleepEditorLoc1x8. care, de fapt, nu este cel mai bun exemplu, dar contribuie la ilustrarea importanței comenzii de stivă în lista de pachete.
Dacă ați acordat o atenție, probabil, ați dat seama că acest pachet este valabil de la 1 ora la 9 dimineața, și ajunge la pachetul de mic dejun Bendu (DefaultEatEditorLoc8x1), care este valabil 8 - 9 dimineața. Deci, acolo ordinea în stivă începe să joace valoare.
AM (latină Ante meridiem.) - ora înainte de prânz, PM (post lat meridiem.) - în după-amiaza, de exemplu, este de 18 de ore de 18 și, etc.
Să presupunem că am tras pachetul de somn în partea de sus a listei Bendu, ca în imagine:
Având în vedere că pachetul virtual de sus în listă este „prioritate“ peste alta, la ora 8 dimineața Bendu va continua să-și îndeplinească un pachet de vis - un pachet de produse alimentare este sub ea în stivă, și, prin urmare, nu va fi pornit, chiar dacă ora curentă așa cum este specificat în termenii săi.
Pentru ca aceasta să funcționeze, tot ce trebuie să facem este să plasăm un pachet de somn sub pachet cu micul dejun pe lista lui Bendu, astfel:
Pentru a muta un teanc pe stivă, utilizați butoanele și
Acum va executa pachetul DefaultSleepEditorLoc1x8 la ora 1 dimineața, așa cum am planificat - acesta este singurul pachet valid în acest moment. Când este 8 dimineața, a comuta la pachetul Bendu DefaultEatEditorLoc8x1, pentru că acum este pachetul real pe care este mai mare în stivă - astfel încât Bendu va dormi 7:00 în loc de 8 în pachetul de mai sus de somn, dar el nu a pierdut micul dejun.
Acum avem o ordine de zi pentru Bendu - el mănâncă 2 ore pe zi, și doarme 7. Ne-ar fi în măsură să continue să umple pachetele sale de zi cu programul, dar în cele mai multe cazuri, ar fi mai bine să-i dea un pachet de „doar foc“, care va începe atunci când niciuna dintre ele nu este validă. Acest pachet nu ar trebui să conțină condiții și orare, deci este întotdeauna valabil - și, prin urmare, ar trebui să fie în partea de jos a listei de pachete.
În aceste scopuri, folosim adesea pachetul Sandbox - permite NPC-ului să se deplaseze în spațiu, alegând o metodă semi-aleatoare, ce să facă. Acest lucru este foarte util atunci când nu suntem deosebit de îngrijorați de ceea ce fac NPC-urile, dar dorim ca aceștia să continue să se comporte în mod natural.
Pentru scopurile noastre, o alegere bună este pachetul DefaultSandboxHomeowner. Să o deschidem și să ne uităm la datele sale:
Cina Bendu cu o bucată de pâine, pe care a primit-o de undeva
O altă caracteristică utilă a acestui pachet este "Unlock On Arrival = True". Acest lucru înseamnă că, de fiecare dată când actorul efectuează pachetul, se va deschide ușa de la camera lui, care este bun, deoarece acesta trebuie să dea căutarea - nu vrem să fie ascuns în spatele unei uși încuiate.
Puteți trece prin filele și condițiile Schedule pentru a se asigura că acestea nu conțin nici o condiție și nu există nici un calendar specific pentru pachetul să fie întotdeauna valabil (pe care ne-o dorim doar).
Deci, puneți acest pachet pe lista de pachete de la Bendu, în partea de jos. Acum are un program simplu și simplu, pregătit pentru această zi:
Dacă doriți să îl vedeți în acțiune, începeți jocul și treceți la Bend:
Pentru a observa comportamentul diferit, puteți modifica ora din zi în joc:
Acum el are niște comportamente simple - să mănânce / să doarmă / să călătorească, care se va face în interiorul casei sale. Dacă nu vrea să doarmă și vă cere să părăsiți camera, puteți folosi comanda toggledetection. astfel încât să ignore jucătorul.
Am analizat cum să folosim pachetele "implicite" existente pentru a construi un program pentru ziua respectivă. Și cum rămâne cu noul pachet, în special pentru Bend? Să spunem că vrem să-l patruleze în jurul casei sale la un moment dat în timpul zilei.
Mai întâi, creați un nou pachet făcând clic dreapta în lista de pachete din fereastra Obiect și selectând "Nou". Veți vedea o fereastră goală a pachetului care arată astfel:
În mod implicit, șablonul Travel este selectat - dar dorim să facem o patrulare, deci alegeți Patrol din lista derulantă. Rețineți că lista de date pachet sa schimbat - modelul Patrol necesită date diferite decât șabloanele de călătorie. Acum avem un pachet gol Patrol, să completăm câteva date despre un pachet specific pentru Bend:
Pagina procedurii Patrol detaliază detaliile acestui pachet. În acest moment, singurul lucru pe care trebuie să-l specificăm în acest pachet este:
- Patrol Start - când ar trebui Bendu să înceapă patrularea traseului?
- Programare - la ce oră ar trebui să folosească acest pachet?
Nu am făcut încă un traseu de patrulare pentru Bendu, așa că să încărcăm exteriorul și să creăm un traseu simplu pentru el. (Dacă ați descărcat interior, dublu-clic pe ușă marcator galben și vă va muta rapid la exteriorul ușii din față, iar dacă te duci alt mod, celula de încărcare în lista de celule spațiul jocurilor MixwaterMillExterior Tamriel.)
- Trageți XMarkerGhidul în fereastra de redare.
- Faceți dublu clic pe acesta utilizând combinația de taste CTRL-D.
- 3 Plasați marcatorul astfel încât să se creeze calea cea mai buna pentru patrulare, apoi cravată-le împreună, folosind tab-ul legat Ref pentru fiecare dintre elementele de marcare.
În cele din urmă, ar trebui să obțineți ceva de genul acesta (locația exactă a marcatorilor de patrulare nu contează):
Acum, în caseta de pachet, selectați lista de patrulare Start și faceți clic pe butonul din dreapta (initial va fi numit „Linked Ref“ Acest lucru va permite să alegeți datele pentru punctul de patrulare inițială (Patrol Start) -. Faceți clic pe butonul radio „de referință specific“ și selectați una de la markerii de patrulă nou creați (care nu contează, deoarece sunt legați împreună într-un cerc).
Al doilea lucru pe care trebuie să facem este specifica atunci când Bendu ar trebui să utilizeze acest pachet (în caz contrar este singurul lucru pe care îl va face atunci când l-am pus un teanc de pachete). Faceți clic pe fila Programare în pachet, și spune că el trebuie să iasă în dimineața între orele 10 și 12:
Singurul lucru de făcut este da numele pachetului - numesc GSQBenduPatrol10x2, care corespunde convențiilor standard de denumire. Faceți clic pe OK pentru a închide această fereastră, care a terminat crearea noului pachet.
Acum, după ce am creat un nou pachet, trebuie să îl adăugăm la lista de pachete Bendu, pentru a-și schimba cu adevărat comportamentul. Găsiți noul nostru pachet în secțiunea Pachet din fereastra Obiect și trageți-l în lista de pachete AI a Bendui. În mod implicit, toate pachetele noi sunt plasate în partea de jos a listei de pachete, dar vrem acest pachet a fost în partea de sus a listei (sau cel puțin pe un pachet DefaultSandboxHomeowner la - altfel niciodată nu va funcționa, deoarece pachetul DefaultSandboxHomeowner este întotdeauna valabil). Utilizați butonul pentru a vă deplasa în partea de sus a stivei Bend:
Faceți clic pe OK pentru a închide fereastra actorului Bendu și a salva pluginul. Acum du-te în joc și a vedea cum Benda va patrula cartier:
Asta e tot - acum știți cum să personalizați pachetele existente pentru actori sau să creați și să utilizați altele noi. În majoritatea cazurilor, șabloanele de pachete gata vor furniza toate funcționalitățile necesare. Dar, dacă ai nevoie brusc de un comportament mai specific, poți chiar să-ți creezi propriul Pachet de Șabloane.
Tutorialul anterior