Quali sono le parti di un personaggio in Unreal Engine?
Come citato nella sezione Modalità di Gioco / Stato di gioco il Framework di gameplay di Unreal Engine aiuta a comprendere come funzionano i personaggi in Unreal Engine. Concettualmente, un giocatore consiste in una pedina che rappresenta la presenza fisica nel mondo del gioco e un controller ne determina il comportamento. Questa dissociazione è utile per l'IA e per la replicazione della rete. Come riferimento, la gerarchia ha questo aspetto:
Iniziamo con l'importazione degli asset, la creazione della pedina e l'elaborazione del controller del giocatore. Per Parrot, il nostro eroe controllato dal giocatore sarà il Capitano Barbarossa (visita il sito web di Quaternius per ottenere il Kit dei pirati a cura di Quaternius).
Importazione degli asset artistici
In uno strumento di modellazione 3D a tua scelta, esporta la mesh o le animazioni in un formato di motore compatibile. In questo caso, gli sviluppatori hanno utilizzato .fbx. Gli asset di Barbarossa sono in Content/Assets/Quaternius/PirateKit/Characters/Barbarossa. Puoi importare il tuo .fbx facendo clic col tasto destro del mouse sul menu contestuale o trascinandolo e rilasciandolo in Esplora contenuti. Si aprirà una .fbx finestra delle impostazioni di importazione. Scegli le opzioni appropriate per l'importazione. In questo caso, assicurati che nessun scheletro esistente sia selezionato e che sia spuntato importa animazioni. È inoltre necessario creare un nuovo materiale atlante che può essere indicizzato dalla mesh. Tale materiale può essere riutilizzato negli asset del Kit dei pirati. Dovresti ora avere questi 3 file ed eventuali animazioni incluse nel tuo .fbx.
Per questioni di pulizia, i file della Sequenza di animazione sono localizzati sotto la cartella Animazioni adiacente ai 3 file:
Scheletro, mesh scheletrica e asset della fisica
Lo scheletro è una gerarchia usata per definire le Ossa (a volte chiamate articolazioni) in una Mesh scheletrica. Queste ossa devono corrispondere al rig nello strumento di modellazione 3D. Gli scheletri possono essere riutilizzati nelle Mesh scheletriche fintantoché i rig sono compatibili. Noterai creato anche un Asset della fisica. Gli asset della fisica definiscono la fisica e la collisione utilizzate da una Mesh scheletrica. Contengono corpi rigidi e limiti per la simulazione. Puoi avere solo un Asset della fisica per Mesh scheletrica e possono essere attivati o disattivati in maniera condizionale. Puoi regolare gli Asset della fisica quando sono importati o creare nuovi asset dalla mesh scheletrica.
Blueprint di animazione
Ora che esiste una Mesh Scheletrica con cui lavorare, puoi iniziare ad animarla con la Blueprint di animazione. La Blueprint di animazione è simile al Sistema di animazione Mecanim di Unity. Il Grafico di animazione in Blueprint di animazione dovrebbe risultare famigliare e funzionare in modo simile. Entrambi i sistemi hanno un flusso di logica condizionale in grado di trasformare stati di animazione in una posa di output finale. Nella tua cartella, crea una nuova Blueprint di animazione dal menu contestuale e seleziona lo Scheletro. La nostra Blueprint di animazione si chiamerà ABP_Captain_Barbarossa in Contenuto/Blueprint/Giocatore.
Sul lato destro dell'Ispettore della blueprint, noterai la presenza di due grafici: Grafico eventi e Grafico di animazione. Il Grafico di animazione è la macchina a stati che controlla la posa di output finale. Il Grafico eventi è il luogo dove puoi definire qualunque logica relativa all'Animazione. Diversamente da Unity, in cui devi trasmettere i dati al componente Mecanim, le Blueprint di animazione possono trarre il necessario in un dato evento. Ad esempio, potresti voler interrogare la velocità del personaggio e guidare la tua animazione in base a quel valore. Un modo pulito per effettuare questa operazione è usare il Nodo animazione inizializzazione Blueprint di animazione nel grafico eventi, Determina l'attore proprietario e memorizzane nella cache il componente di movimento in una variabile. Da lì, a ogni tick di BlueprintThreadSafeUpdateAnimation, puoi interrogare la velocità direttamente dal componente di movimento. Anche le variabili possono essere condivise tra il Grafico eventi e il Grafico di animazione.
La Blueprint di animazione configurata per Barbarossa vale la pena approfondirla per conto tuo. Facendo doppio clic nei nodi puoi vedere come le macchine a stati, gli stati e le regole di stato sono configurate per la posa di output finale. Ci sono anche esempi di utilizzo di un riproduttore di sequenze e di uno spazio di fusione. In modo simile, il grafico eventi mostra come l'animazione sia guidata dai dati del personaggio; questa relazione diventerà più chiara più avanti nell'articolo.
Pawn
Ora che è presente una Mesh scheletrica in grado di animare, puoi iniziare a creare la tua Pedina che sarà usata dalla Modalità di gioco. Gli sviluppatori hanno scelto di compilare sul Personaggio predefinito di Unreal Engine che è una classe figlia della classe C++ della pedina predefinita. La classe del personaggio ha un componente di Movimento del personaggio utile in particolare per questo gioco ed è un'altra classe su cui compilare.
Sia il giocatore sia le pedine nemiche condividono alcune funzioni come i punti danno, i colpi subiti e la morte. Questa funzionalità è condivisa creando una classe C++ AParrotCharacterBase che eredita da ACharacter. La classe fornisce un buon punto di partenza da cui compilare quando le pedine del giocatore e quelle nemiche divergono nel comportamento.
Successivamente, crea un C++ AParrotPlayerCharacter per gestire la logica specifica del giocatore. Infine, creerai una blueprint per gestire la rappresentazione visiva del tuo personaggio. La Blueprint di Parrot è BP_ParrotPlayerCharacter in Content/Blueprints/Player. La gerarchia di ereditarietà ha questo aspetto:
Aprendo BP_ParrotPlayerCharacter, dovresti vedere alcuni componenti sotto l'ispettore di componente a sinistra della finestra dell'editor. Il Componente della mesh è dove puoi impostare il tuo Asset mesh scheletrica così come la Blueprint di animazione in Classe anim. Se la mesh non è posizionata correttamente, puoi correggere i valori di trasformazione da allineare al componente della capsula. Dovresti avere qualcosa del genere:
Successivamente, puoi assegnare la classe di pedina predefinita alla Blueprint nell'asset della modalità di gioco.
Ora è presente una pedina animata che può essere usata nel gioco.
Controller del giocatore
Con una pedina utilizzabile, puoi ora creare il controller del giocatore. I controller del giocatore rappresentano, essenzialmente, la volontà del giocatore umano. Un aspetto da considerare quando crei il tuo gioco è dove definire gli eventi di input. Per giochi semplici in cui le pedine non cambiano, la pedina è adatta allo scopo. Tuttavia, quando il comportamento inizia a divenire complesso, il controller del giocatore è un'opzione migliore. Le pedine sono temporanee e possono essere possedute o non possedute dai controller del giocatore. Le pedine possono essere generate o distrutte mentre i controller del giocatore persistono per l'intera durata del gioco.
Nel controller del giocatore non avrai bisogno di alcuna logica C++, quindi crea una blueprint per fare quanto necessario. BP_ParrotPlayerController si trova in Contenuto/Blueprint/Giocatore. La gerarchia di ereditarietà ha questo aspetto:
All'interno della Blueprint, si nota la presenza di nodi di eventi di input che conducono a una logica di gameplay di base. Questi eventi di input sono legati in particolare all'Input potenziato. Puoi saperne di più su come questo viene configurato nella documentazione Input potenziato. Memorizzando nella cache la pedina del personaggio giocatore di Parrot a Inizio gioco, possiamo usarla per chiamare più tardi funzioni di movimento di base. Ad esempio Aggiungi input movimento, Salta e StopJump.
È ora di passare ai test. Nel BP della modalità di gioco, imposta la nuova classe controller del giocatore e poi verifica che puoi utilizzare il controller in partita:
Da questo menu a tendina nell'editor livelli, verifica che sia selezionata la modalità di gioco corretta:
Infine assicurati che la mappa abbia un attore PlayerStart e una telecamera che puoi visualizzare. Quando premi il pulsante play dovresti vedere il personaggio muoversi e animarsi:
Componente di movimento del personaggio in Parrot
La classe di base ACharacter ha integrata una grande funzionalità. Ne è un esempio il componente attore UCharacterMovement. Il componente di movimento del personaggio gestisce tutta la logica di come un personaggio si muove attraverso il mondo. Supporta la camminata, la corsa, la caduta, la nuotata, il volo e modalità di movimento personalizzate. Vale sicuramente la pena esplorare per conto proprio per avere un'idea di come funzioni il movimento base di un personaggio e di quanto siano potenti i componenti attore.
Per Parrot il componente di movimento base del personaggio non ha dato quella sensazione di gioco che gli sviluppatori cercavano sin dal primo utilizzo. Tuttavia, ha fornito solide fondamenta su cui lavorare. La classe C++ UParrotCharacterMovementComponent deriva da UCharacterMovementComponent. Possiamo quindi impostare il componente di movimento sul componente di movimento CDO in BP_ParrotPlayerCharacter come nell'immagine:
Ma che fa esattamente il componente di movimento di Parrot? Essenzialmente, il componente ti permette di definire un salto di "stile di gioco di piattaforme" eseguendo l'override di funzioni dal componente di movimento base relativo al salto. Utilizzando dei valori adattabili al design, quando avviene un salto, puoi modificare la scala di gravità del personaggio giocatore e la velocità di salto per raggiungere un'altezza massima in un intervallo di tempo prestabilito. Al raggiungimento del culmine, puoi quindi iniziare ad applicare una scala di gravità della caduta. Se il giocatore rilascia presto l'input del salto, puoi applicare un moltiplicatore per incrementare la gravità.
Il risultato è un salto che somiglia più a ciò che ti aspetteresti in un gioco di piattaforme, rispetto alla semplice applicazione di un impulso sull'asse Z.
Contando sul grosso del lavoro del componente di movimento del personaggio base, puoi focalizzarti sulla logica del componente di movimento Parrot nel salto. Vale la pena anche dare uno sguardo ai valori nell'ispettore per BP_ParrotPlayerCharacter sul componente di movimento, per avere una visione completa di come tutti i pezzi del componente di movimento lavorano insieme. La logica del movimento può essere espansa per adattarsi a qualsiasi varietà di casi d'uso.