Oggi approfondiremo il Kismet di UDK e daremo un'occhiata allo sviluppo degli eventi, cosa sono, come possiamo crearli e come possiamo gestirli. Imparerai come creare e gestire quasi tutti i tipi di eventi in UDK per poter creare livelli completi, complessi e completamente programmati a partire dal semplice livello che creeremo in questo tutorial.
In UDK, un evento è una situazione particolare che si definisce, (ovviamente in Unreal Kismet) che porta conseguenze al gioco o ad altri elementi di gioco. Puoi creare eventi ovunque in un livello, senza limitazioni. Puoi dividerli in tre gruppi diversi: Eventi precompilati, Eventi trigger o Eventi InterpActor. In questo tutorial li copriremo tutti per darti una visione completa di come un evento viene creato e manipolato.
Eventi precompilati: se apri l'Unreal Kismet (il K verde nella parte superiore della finestra UDK, vicino all'icona del browser Contenuti e all'icona Matinee) e fai clic con il pulsante destro su uno spazio vuoto della finestra di Kismet, e vai sotto "Nuovo evento", vedrai un sacco di eventi pronti all'uso raggruppati insieme come "Attore", "AI" o "Pedone" per esempio. Actor, AI e Pawn sono in questo caso, la parte che innesca un evento e senza di essi, l'evento non inizia affatto. Quindi, un esempio: se vuoi che un evento abbia inizio quando un nemico muore, devi andare sotto "Pedone", perché un nemico è chiamato un pedone, e scegli la Morte.
Per il nostro scopo, creare a 512 x 512 x 256 Cubo scavato.
Ora, aggiungi una luce puntiforme nella stanza tenendo premuto il tasto L tasto sulla tastiera, quindi fare clic con il tasto sinistro del mouse nella stanza appena creata (il cubo).
Sposta la luce al centro della stanza, quindi ricostruisci l'illuminazione (con o senza Lightmass, non è importante).
Fatto? Ora, possiamo iniziare con il nostro primo evento UDK, un evento precompilato in questo caso. L'evento precompilato più comune utilizzato da un coder UDK è l'evento "Livello caricato". Come puoi immaginare, questo evento inizia quando viene caricato il livello. Quindi, iniziamo con questo: Vai a Unreal Kismet, fai clic destro su uno spazio vuoto e vai a Nuovo evento> Livello caricato.
Ora dovresti avere un nodo chiamato "Livello caricato" nel tuo Kismet. Se è così, ora puoi vedere che questo Nodo ha tre Output o, meglio in questo caso, tre condizioni per attivare l'evento: Quando il livello è Loaded e Visible, all'inizio del livello o quando c'è un Reset di livello. Queste condizioni sono abbastanza auto-esplicative, infatti l'unica differenza tra "Loaded and Visible" e "Beginning of level" è un piccolo ritardo del secondo rispetto al primo. Mentre il terzo riguarda la ricarica del livello, ma non entreremo in questa funzione ora.
Creeremo una sorta di allarme che dice al giocatore di prepararsi perché un nemico sta arrivando. Per raggiungere questo obiettivo, creiamo un altro nodo andando (sempre con il tasto destro del mouse), a Nuova azione> Voce / Annunci> Riproduci annuncio.
Ora, fai clic su questo nodo e nella barra Testo annuncio, scrivi "Preparati! Un robot sta arrivando per ucciderti!" Con questo, stiamo dicendo a UDK di scrivere un testo al centro del monitor che avvisa il giocatore che un robot sta arrivando per ucciderlo, quindi deve prepararsi a combattere.
Ora, crea altri 6 nodi Annuncio, come abbiamo fatto prima.
Nell'ultimo, scrivi sotto Annuncio Testo "Prendi lo Shock Rifle e il combattimento inizierà!".
Negli altri nodi, useremo un conto alla rovescia del suono che è incluso nelle risorse UDK. Quindi, vai nel "Content Browser" e scrivi nella barra di ricerca "conto alla rovescia". Apparirà un Dieci Soundnode Wave, quindi selezionare "Countdown 5".
Ora, torna a Kismet e fai clic sul primo nodo Play Announcement vuoto. Vai nella barra del suono degli annunci e fai clic sulla freccia verde sulla destra. Il nome di SoundNode Wave dovrebbe apparire nella barra. Quello che hai appena fatto è dire a UDK di riprodurre il suono un numero (cinque) volte per creare un conto alla rovescia.
Quindi ora fai ciò che hai appena fatto con il nodo precedente, con i quattro nodi di annuncio Play rimanenti. Ricordando che è necessario prima selezionare il numero per il conto alla rovescia nel Content Browser (il quarto, il terzo, il secondo e il primo) e quindi fare clic sul nodo in Kismet, quindi nel suono dell'annuncio, fare clic sulla freccia verde per inseriscilo.
Fatto? Bene. Ora è il momento di connettere l'evento ai nodi che abbiamo creato. Collegare l'uscita di "Inizio del livello" al primo nodo di annuncio.
Quindi, dall'uscita del primo nodo di annuncio all'ingresso del secondo nodo di annuncio e così via (come mostrato di seguito).
Ora, quando il livello inizia, abbiamo una serie di annunci che avvisano il giocatore, ma se li lasciamo come sono, verrà visualizzato un solo annuncio sullo schermo e il giocatore non riceverà tutte le informazioni che vogliamo dargli . Per visualizzarli tutti, dobbiamo impostare un ritardo tra i nostri nodi dell'annuncio. Quindi, fai clic con il pulsante destro sull'output (il rettangolo nero) del primo nodo Annuncio e fai clic su "Imposta attivazione ritardo". Nella finestra che appare, imposta il ritardo su 2.0 e fare clic su OK.
Ripetere il passaggio precedente per le connessioni tra gli altri nodi, ma questa volta impostare il ritardo su 1.0, perché c'è il conto alla rovescia!
Eventi trigger: si tratta di eventi particolari utilizzati per attivare parte di un elemento, che non viene mostrato durante la partita, chiamato "Trigger". I trigger sono cilindri, ma non cilindri appropriati. Hanno un raggio e un'altezza, ma non sono un pennello o qualcosa a cui puoi applicare un materiale. Il raggio e l'altezza di questi cilindri descrivono l'area in cui un giocatore, una pedina o qualsiasi cosa tu desideri, possono attivare l'evento relativo. Quindi in questo caso, i giocatori o le pedine non sono direttamente responsabili dell'avvio di un evento, ma lo attivano attraverso il contatto con l'area definita del cilindro di Trigger.
Ricorda che hai scritto nell'ultimo annuncio "Take the Shock Rifle?"? beh immagino sia ora di metterne uno nel tuo livello. Ma prima, mettiamo un grilletto, che ci aiuterà a definire l'area in cui il giocatore attiverà il prossimo evento, e dove genereremo il nostro lanciarazzi. Quindi, fai clic con il tasto destro sul pavimento, vai su "Aggiungi attore" e seleziona "Aggiungi trigger". Ora noterai che è apparsa una strana icona, quello che sembra essere un interruttore, con un rettangolo rosso che si avvolge attorno a un cilindro verde.
Ora, come ho detto prima, il cilindro è l'area che definisce se c'è un contatto con il giocatore o meno, e attiva un evento. Facciamolo più grande. Fai clic con il pulsante destro del mouse sul grilletto, vai su "Proprietà" e sotto "Componente del cilindro", modifica il raggio del cilindro e l'altezza come desideri (io vado per un 60-60.)
Probabilmente come con il mio, il tuo cilindro di Trigger è caduto nel terreno. Quindi fai scorrere verso l'alto e quando hai finito, torna a Kismet.
Su uno spazio vuoto vicino all'ultimo annuncio, fai clic con il pulsante destro del mouse e vai a Nuova azione> attore e seleziona "Fabbrica degli attori".
Fare clic su questo nodo e, nella barra Fabbrica, fare clic sulla freccia blu sulla sinistra e selezionare "UTFactoryPickup". Quindi fai clic su "Factory" per espanderlo e nella barra Inventory seleziona "Shock Rifle".
Quindi, seleziona Trigger nel livello e torna a Kismet, fai clic con il tasto destro del mouse sull'input "SpawnPoint" e fai clic su "New Object Var using Trigger".
Ora collega l'uscita dell'ultimo nodo di annuncio all'ingresso del nodo di fabbrica dell'attore. Bene, finalmente abbiamo il nostro Shock Rifle che viene generato dopo l'ultimo annuncio.
Ora, dobbiamo generare un nemico dopo che il giocatore ha preso il Fucile Shock. Per fare ciò, creeremo un evento Trigger. Con il Trigger selezionato nel livello, vai su Kismet e fai clic con il pulsante destro del mouse su uno spazio vuoto, quindi in "Nuovo evento utilizzando Trigger", seleziona "Tocca". Ciò significa che l'evento verrà attivato quando il giocatore entra nell'area del cilindro. Un'altra scelta comune è "Usato", significa che quando il giocatore è di fronte al cilindro e preme il tasto E può attivare un evento. Gli altri sono scelte minori, che non vengono usate frequentemente con un trigger.
Ora crea un altro nodo "ActorFactory", ma questa volta nella barra Factory, seleziona "UTActorAI". E nelle proprietà Factory, impostare ControllerClass: su "UTBot", su PawnClass: su "UTPawn" e controllare la proprietà "GiveDefaultInventory".
Quindi, dagli un nome (lascerò la decisione a te) e connetti l'evento "Trigger Touch" a "Actor Factory". Ora, fai clic con il tasto destro sull'output "generato" e seleziona "Crea nuovo var di oggetto".
Nel tuo livello, sul lato opposto di Trigger, fai clic con il pulsante destro del mouse sul pavimento, seleziona "Aggiungi attore" e seleziona "Aggiungi nodo di percorso"..
Ora, torna a Kismet, fai clic destro su "Spawn Point" e seleziona New Object Var usando Pathnode. Infine, hai creato il tuo primo Evento Trigger e hai generato il tuo nemico dopo che il giocatore ha preso l'arma, l'unica cosa che rimane è dare al nemico un bersaglio.
In Kismet, fai clic con il pulsante destro del mouse e vai a Nuova azione> Varie e seleziona "Trace".
Collega l'uscita "Finished" di ActorFactory all'ingresso "Trace", quindi collega l'input Start di "Trace" alla variabile Object di "Spawned" di ActorFactory.
Ora, fai clic con il pulsante destro su uno spazio vuoto e vai a Nuova azione> AI e seleziona "Inizia a licenziare".
Quindi, fai clic con il tasto destro su uno spazio vuoto, vai a Nuova azione> AI e questa volta seleziona "Interrompi cottura".
Collegare l'uscita "Non ostruito" a "Iniziare l'accensione" e "Obstructed" a "Interrompere l'accensione".
Collega l'uscita di "Start" e "Stop Firing" all'ingresso di "Trace" (come mostrato).
Imposta il loro ritardo di uscita su .5.
Collega l'input target di "Start" e "Stop Firing" alla variabile dell'oggetto generato.
Ora, fai clic con il pulsante destro su uno spazio vuoto e vai a Nuova variabile> Player, e seleziona "Player".
Collega l'ingresso "Fuoco At" alla variabile giocatore. Improvvisamente, hai creato un robot (un nemico) che genera nel cilindro del grilletto e poi cerca il giocatore. E se è ostruito da qualcosa, non spara, mentre se non è ostruito può sparare liberamente al giocatore.
Ora, se provi il tuo livello, vedrai che a volte il nemico viene generato prima della fine del conto alla rovescia. Ciò accade perché Trigger è già abilitato e non attende la fine della precedente sequenza di Kismet. Per attivarlo solo al termine del conto alla rovescia, andiamo su Kismet, seleziona "Trigger Event Touch" e deseleziona "Abilitato" nelle sue proprietà.
Quindi fai clic con il pulsante destro del mouse (come sempre in Kismet) e vai a Nuova azione> Attiva e scegli "Attiva / disattiva".
Collega ora l'uscita dell'ultimo nodo di annuncio di riproduzione all'ingresso "Attiva" del nodo di commutazione e l'uscita "Evento" di "Attiva / disattiva" all'evento "Trigger Touch". Ora hai un evento Trigger che viene abilitato quando la sequenza Play Announcement è terminata.
Eventi InterpActor, StaticMeshActor e Brush: Questi sono simili a quelli trigger, infatti questi eventi sono sempre attivati dal contatto con un'area, ma in questo caso non con un'area cilindrica, ma con un'area personalizzata relativa a InterpActor (o StaticMeshActor o pennello) scelto. L'unico grande cambiamento, a parte la diversa area con cui puoi entrare in contatto, è che il Trigger è visibile durante il gioco, e puoi entrare in contatto fisico con esso mentre giochi.
Infine, siamo arrivati a InterpActor Events. Per questo tipo di evento, creeremo una sorta di divisione tra il livello e dividerlo in due parti, ma in un modo singolare! Quindi, vai al "Content Browser" e cerca "thinwire", quando la ricerca è completata, fai doppio clic su "Thinwire16" e fai un clic destro nel tuo livello e seleziona "Aggiungi InterpActor".
Ora cerca "connettore" e seleziona il primo risultato della tua ricerca, aggiungi questo InterpActor due volte.
Regola questi tre elementi come mostrato nell'immagine sottostante, per dividere la stanza in due parti. (A tale scopo, ridimensionare il filo sottile Y di 1.2)
Con questi elementi ancora selezionati, premere F4 per aprire le Proprietà.
Ora vai su "Collision" e imposta "Collision Type" su "Touch All".
Quello che hai appena fatto è mettere tre InterpActor nel livello con un Tipo di collisione impostato su Tocca tutti. Ciò significa che in questo caso, un evento verrà attivato se il giocatore o qualcun altro tocca i fili oi connettori. Ora, dobbiamo creare questo evento! Seleziona i tre attori che abbiamo creato, vai su Kismet, fai clic con il tasto destro su uno spazio vuoto e vai su "Nuovo evento usando InterpActor?" E seleziona "Tocca".
Fai clic con il tasto destro su Kismet, vai a Nuova azione> attore e seleziona "Modifica salute".
Seleziona il nodo "Modifica salute" e imposta la quantità di danno a 100 (vita del giocatore) puoi anche impostare il tipo di danno su Crush o Telefragged se vuoi che venga riprodotto un suono quando il giocatore riceve il danno.
Ora, fai clic con il pulsante destro del mouse su Kismet, vai a Nuova variabile> Player e seleziona "Player".
Collegare l'ingresso "Target" di "Modifica salute" a questa variabile.
Collegare tutte le uscite "toccate" degli eventi InterpActor al nodo "Modifica salute". Ora, quando qualcuno tocca i fili oi connettori, il giocatore morirà. Non così uguale, ma in questo livello il nemico non si muove, si trova proprio di fronte a te e ti spara, quindi non può toccare i fili. Mentre il giocatore deve stare attento quando si muove.
C'è ancora un problema da risolvere, se muori toccando i fili oi connettori e respawn, toccando l'InterpActor che ti ha appena ucciso, non ti ucciderà più. Questo perché i nostri eventi sono impostati per essere attivati una sola volta. Per risolvere il problema, vai su Kismet, seleziona tutti i nodi degli eventi InterpActor e vai in "Eventi sequenza".
Queste proprietà sono le stesse nel nodo iniziale di ogni evento: "Max Trigger Count" indica quante volte l'evento può essere attivato. "Ritardo trigger" indica quanto tempo dura un'attivazione prima di quella successiva. "Abilitato" significa ovviamente che se è selezionato, l'evento è attivato, altrimenti è inattivo. "Priorità" è utile quando hai molti eventi che iniziano nello stesso momento, e infine "Solo giocatore o lato cliente" indica chi può attivare questo evento. Per il nostro scopo, impostare "Max Trigger Count" su 0 (infinito).
Infine, il livello è completo, quindi, salva, ricostruisci i tuoi livelli di illuminazione e percorsi e sei pronto per provare il livello!
Ora fai clic con il pulsante destro del mouse e vai su "Nuova condizione" e seleziona "È vivo".
Collega l'uscita finita all'ingresso "Is Alive's" e collega l'uscita "True" a "Trace" e "Start Fire At" e "Stop Fire" a "Is Alive's" Input. Collega anche il player di "Is Alive" all'oggetto "Spawned". Ora hai finalmente corretto l'errore (provaci!) E sei pronto per giocare al tuo livello!