Gestionarea NPC-urilor la sol
Gestionarea NPC-urilor la sol. În această lecție veți obține cunoștințe inițiale în gestionarea NPC-urilor de la sol: Cred că vă puteți face cu ușurință loc sau cameră, deci nu voi descrie cum se face.
Am aplicat cardul la lecție cu toate NPC-urile, declanșatoarele etc. Sunt special pentru cei care sunt prea leneși pentru a face totul cu ei înșiși. (rămâne doar să aruncăm o privire asupra setărilor și să aflăm despre ce sunt) =)).
Și așa ...
În această lecție vă voi prezenta sistemul de declanșatoare pentru NPC, după care puteți:
- Camera 1: Atribuiți NPC-ului pe traseul lor folosind scripted_sequence
- Camera 2: Atribuiți NPC-ul pe calea lor folosind path_corner
- Cameră 3: Animați NPC
- Camera 4: Resaponați NPC-ul și apoi indicați imediat unde să mergeți
- Camera 5: Respawn un monstru aleator sau un generator de numere aleatoare.
- Camera 6: Forța NPC Trage oriunde / atacă pe cineva / indică cine este inamicul său și cine nu este /
După cum probabil ați observat, harta este împărțită în camere mici. Am făcut-o cu scopul de a separa subtimele noastre de lecție.
În fiecare cameră, am pus maneta (în cazul în care butonul este amplasat, undeva un obiect de bătaie) pentru a declanșa declanșatorul.
PS: Nu acordați atenție cuburilor purpurii pe care le am pe capturile de ecran. Acesta este lumina_spot.
Prima cameră:
Aici este cel mai simplu script pentru a trimite un NPC la un singur punct folosind scripted_sequence.
Pentru aceasta avem nevoie de urmatoarele:
1) npc_alyx // firește, NPC-ul în sine
setări:
Nume: Alyx_room1 // setați numele astfel încât să puteți face referire la această entitate de la alții.
2) scripted_sequence // Imedo înainte ca această entitate să meargă Alex
setări:
Nume: Alyx_target_room1
Target NPC: Alyx_room1 // aici specificăm cu ce NPC scripted_sequence va funcționa
Custom Move Animation: s_walk_N // Acest câmp ne permite să alegem animația pe care NPC o va efectua atunci când se mișcă. Am ales mersul simplu.
Mutați la Posotion: Plimbare // Cum NPC va ajunge la ținta. Am ales pe jos.
4) func_button
În declanșatoarele de ieșire (fila "Ieșiri"), adăugați următoarele:
Ieșirea mea Numit: Pe Apăsat
Elemente de taguri Nume: alyx_target_room1
Prin această intrare: Start Sequence
Să punem acum Alyx la un capăt al camerei și Alex_target în celălalt.
Ar trebui să aveți ceva de genul asta
Acum puteți compila și vedea ce sa întâmplat.
Rezultatul ar trebui să fie următorul:
Când faceți clic pe buton, Alex ar trebui să ajungă la capătul camerei.
A doua cameră:
În acest exemplu, luați în considerare mișcarea NPC-urilor de-a lungul unei rute date.
Acest exemplu este similar cu cel precedent, dar numai acum vom folosi path_corner în loc de scripted_sequence.
Path_Corner este, de asemenea, un punct de mișcare NPC și este de obicei folosit pentru mișcări simple în contrast cu scripted_sequence. Cum se utilizează path_corner pe care îl veți vedea în acest exemplu.
Avem nevoie de următoarele obiecte:
1) 4 piese path_corner // Căi.
setări:
Nume: alyx_path1_room2; alyx_path2_room2; alyx_path3_room2; alyx_path4_room2 // da fiecare cale un nume
Următorul obiectiv de oprire: alyx_path2,3,4,1_room2 // aici specificăm numele căii următor unde va merge npc. De exemplu, dacă avem numele alyx_path2_room2, Următorul Stop Target va fi alyx_path3_room2. Pentru ca NPC să se blocheze în căi, este necesar în ultima cale, în Următorul Stop Target specificați prima cale. În cazul nostru, Alex va alerga în cercuri.
Setările nu sunt necesare
2) aiscripted_shedule // controlează NPC-ul
setări:
Nume: Alyx_shedule_room2
NPC țintă: Alyx_room2 // specificați NPC pe care o vom gestiona
Shedule Pentru a rula: Run Run Cale // Ce NPC va face când va începe. (în cazul nostru, du-te la obiectiv)
Obiectivul obiectivului: alyx_path1_room2 // Din configurația de vârf, specificați unde se va executa NPC-ul
3) func_button
În declanșatoarele de ieșire (fila "Ieșiri"), adăugați următoarele:
Ieșirea mea Numit: Pe Apăsat
Taguri Entități Named: alyx_shedule_room2
Prin această intrare: StartShedule
4) npc_alyx // Alex
setări:
Nume: Alyx_room2
Acum te-ai oprit pentru a pune toată această afacere în locurile tale.
Am făcut-o așa
Acum compilați și verificați. Conform ideii, Alex ar trebui să alerge în cercuri :)
Camera a treia:
În această cameră veți vedea un exemplu despre modul în care este animat NPC-ul.
Și așa, aici este setul de entități necesare:
1) npc_alyx
setări:
Nume: alyx_room3
2) scripted_sequence
setări:
Nume: alyx_start-run_room3
Obiectivul NPC: alyx_room3
Animație de acțiune: Open_door_away // Acesta este numele animației care va fi redată când NPC ajunge la această entitate.
Custom Move Animation: run2
Mutați în poziția: executați
Fila OUTPUTS:
Ieșirea mea numită: OnBeginSequence // când alex ajunge la entitate, se întâmplă în continuare ...
Etichete Entități Named: door_room3 // ... ușa ...
Prin această intrare: se deschide // ... se va deschide ...
După o întârziere în secunde de: 2,30 // ... după 2,30 minute (de ce 2,30 2,30 - Alex este lungimea animației atunci când se deschide ușa Dacă nebylo 2,30, atunci ar trebui este că atunci când Alex va veni de funcționare la ușă, ușa se va deschide ?. și apoi numai animația va funcționa.)
3) func_door // Ușa este deja în cameră, nu trebuie făcută.
setări:
Nume: door_room3
Întârziere înainte de închidere: -1
În marcajul FLAGS, bifați direcția inversă (pentru a deschide ușa în direcția opusă).
4) func_button
Fila OUTPUTS:
Ieșirea mea Numit: Pe Apăsat
Elemente de taguri Nume: alyx_start-run_room3
Prin această intrare: BeginSequence
La mine rasvă astfel
Dacă ați făcut-o corect, atunci când apăsați butonul, Alex ar trebui să alerge la ușă și să-l deschidă.
A patra cameră
Această lecție vă va ajuta să creați (respawn) NPC și apoi să faceți imediat unele acțiuni.
Eh. M-am săturat de acest Alex;) și butonul prea ... să punem ka ... ei bine ... Zombie! și o pardoseală de metal ca o pârghie de exemplu ...
Iată lista entităților utilizabile
1) npc_maker // această entitate este responsabilă pentru crearea NPC. În cazul nostru, creați un Zombik.
setări:
Nume: zombie_maker_room4
Numele de clasă al NPC provocat: npc_zombie
Numele copiilor: zombie_room4
2) aiscripted_schedule // așa cum sa menționat mai sus, această entitate colaborează cu NPC.
Setări: // descrieri ale setărilor aiscripted_schedule pe care le-am descris pentru a doua cameră
Nume: zombie_shedule_room4
Ținta NPC: zombie_room4
Shedule Pentru a rula: Run Run Cale
Entitatea țintă: zombie_path1_room4
3) două path_corners
setări:
- Pentru prima:
Nume: zombie_path1_room4
Următorul obiectiv de oprire: zombie_path2_room4
- Pentru al doilea:
Nume: zombie_path2_room4
Următorul obiectiv de oprire: zombie_path1_room4
4) func_breakable // pârghia întregului declanșator sub forma unei plăci de oțel.
setări:
Forță: 1
Tipul materialului: Metal
-- OUTPUTS: // aici vom avea mai multe declanșatoare
1) -Emiterea mea este numită: OnBreak // Când se rupe ...
-Taguri Entități Named: zombie_maker_room4 // ... entitatea responsabilă pentru crearea zombi ...
-Prin această intrare: Spawn // ... va crea un zombie
2) - Ieșirea mea Numit: OnBreak // Când se rupe ...
-Taguri Entități Named: zombie_room4 //.zombi ...
-Prin intermediul acestei intrări: SetRelationship // va fi prietenos cu ...
-Cu o suprasarcare a parametrilor de. player D_LI 9999 // ... player
-După o întârziere în secunde: 0,20. în 0.20 secunde
3) -Eșor de ieșire Named: OnBreak // Când se rupe ...
-Taguri Entități Named: zombie_shedule_room4 // ... "Controller over NPC" ...
-Prin această intrare: StartSchedule // ... va lansa scriptul specificat ... ... (În cazul nostru, indică unde să meargă zombie) ...
-După o întârziere de secunde de: 0,40 / ... în 0,40 secunde.
Și acum vom pune totul în locul ei.
Am spus așa:
Ce ar trebui să obținem?
Când spargem o farfurie, zombiul nostru după respawn ar trebui să ruleze m \ în două moduri și nu ar trebui să ne muște =))
PS: sunete incapatanate pe care le face cand merge pe jos :))
Camera a cincea
Cea mai importantă entitate din această cameră este logic_case. Ne vom uita la una din posibilitățile sale, aceasta este o alegere de semnificație aleatorie.
Cu această entitate, îți arăt cum poți să faci un monstru aleatoriu.
Vom avea nevoie de:
1) 5 piese npc_maker
setări:
Numele de clasă al NPC-ului: // aici alegeți 5 npc diferite
La fiecare NPC, dați-vă numele (numele copiilor) astfel încât să îl puteți adresa. De exemplu, am atribuit npc_alex alex_maker_room5, pentru npc_zombie - zombie_maker_room5, și așa mai departe.
2) logic_case
setări:
nume: npc_case
Cazul 01: 1
Cazul 02: 2
Cazul 03: 3
Cazul 04: 4
Cazul 05: 5 // am stabilit 5 numere, din care numai unul va fi aleasă la întâmplare
Fila Outputs: / / aici trebuie să adăugăm 5 declanșatoare
1) - Ieșirea mea este numită: OnCase01
-Taguri Entități Named: alyx_maker_room5
-Prin această intrare: Spawn
2) - ieșirea mea denumită: OnCase02
-Taguri Entități Named: zombie_maker_room5
-Prin această intrare: Spawn
Așa că continuați până când setați declanșatoarele pentru toate NPC-urile.
Și acum îți explic cum funcționează:
După ce am indicat că vor fi utilizați 5 declanșatori, logic_case le generează și selectează numai unul, care apoi rulează.
În consecință, el (logic_case) el însuși va alege care din npc_makers își va crea unitatea.
Bineînțeles, nu uitați să rulați logica noastră, prin țiglă.
De exemplu, în proprietățile func_breakable în fila Outputs specificăm următoarele:
OnBreak -> npc_case -> PickRandom
Iată cum am pus totul pe harta mea:
A șasea cameră
Aici vă voi arăta cum să faceți focul NPC unde indicați.
Amintiți-vă filmul cu E3, în cazul în care rulați în casă, blocând ușa din spatele mesei. Nu observați când începe să filmeze Combină în fereastră? Îți spun: începe să tragă când nu ai timp să stai la mașina de spălat (sau ceva de genul ăsta).
Ei bine, dragii mei, acesta este un scenariu de apă curată (și Valv a spus că nu vor fi ei ... trage concluzii ...) și vă voi arăta cum să îl implementați ...
În general avem nevoie de unul sau mai multe npc_combine_s (poți avea orice monstru, am ales soldați). // din setările pe care trebuie doar să le apelam în câmpul Name: (Am Combine_room6)
Apoi, veți avea nevoie de o țintă, unde NPC va trage. Pentru a face acest lucru, vom ajuta entitatea npc_bullseye cu următoarele setări:
Nume: // Am target1_room6
- În fila Steaguri, bifați caseta Nu este solidă și nu faceți niciun fel de daune
Acum avem nevoie de Activatori, adică de butoane sau declanșatoare, care NPC va "Spune" că inamicul nu 1 este npc_bullseye noastre.
Am pus butonul cu următoarele setări:
Fila Outputs:
1) -De ieșire mi-a dat numele: OnIn // când butonul este activat ...
-Taguri Entități Named: combine_room6
-Prin intermediul acestei intrări: SetRelationShip
- Cu un parametru ovverride de: target_room6 D_HT 9999 // aici indicăm faptul că target_room6 Enemy
2) - ieșirea mea denumită: OnOut // când întrerupătorul este oprit
-Taguri Entități Named: combine_room6
-Prin intermediul acestei intrări: SetRelationShip
- Cu un parametru ovverride de: target_room6 D_LI 9999 // aici indicăm faptul că target_room6 este alianța
Asta e tot. Când apăsați butonul, NPC dvs. va trage la țintă, dacă stoarceți butonul, atunci se oprește să trageți la ea.
Dacă NPC dvs. implicit este dușmanul vostru, atunci vă sfătuiesc să puneți Entitatea logic_auto și în Ieșiri specificați următoarele:
-Ieșirea mea Numit: OnMapSpawn
-Taguri Entități Named: combine_room6
-Prin intermediul acestei intrări: SetRelationShip
- Cu un parametru ovverid de. player D_LI 9999
De asemenea, puteți forța NPC-ul să atace o țintă în mișcare. Pentru aceasta, entitatea npc_bullseye din câmpul Parent trebuie să obțină numele obiectului care se mișcă, prin urmare npc_bullseye va călători / zbura / pluti împreună cu părintele său (părinte)
Iată aranjamentul meu în cameră:
În acest sens, vom termina cursul nostru mic în biroul NPC.
Descărcați harta sursă aici.
Descărcați versiunea finită aici.