Il talk porrà una riflessione su pregi e difetti di uno dei motori di gioco più potenti al mondo, attraverso la testimonianza dello sviluppo del platform/shooter Steampunk League. Mentre verrà mostrato un riepilogo delle varie fasi di sviluppo del gioco, saranno messi in luce punti di forza e punti deboli del motore in questione, con commenti a codice specifico o questioni tecniche quali implementazioni di modelli, animazioni e packaging.
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Pregi e difetti dello sviluppo di videogames con Unreal Development Kit: Steampunk League dal concept al gioco by Siro Toracchio
1. This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
2.
3.
4. PROGRAMMAZIONE CON UDK
Tools:
• UDK Editor
• Unrealscript IDE
• UnCodeX
Requisiti:
• Skills OOP
• Tanto tempo!
Responsabilità:
• Creare classi di supporto per i Game
Designer
• Risolvere problemi non risolvibili
dall’Editor
• Non solo scrivere codice, ma conoscere
tutte le principali funzionalità
dell’Engine
• Comunicare con gli altri membri del
Team
5. UNREALSCRIPT
Pregi:
• Sintassi semplice e
intuitiva
• Potenza di un linguaggio
ad oggetti di alto
livello
• Peculiarità di linguaggi
come C#, Java
• Flessibilità nella
programmazione del
Gameplay
• Supporto per gli stati
• Fornisce un alto livello
di astrazione
Difetti:
• UDK non offre
strumenti di sviluppo
a cui un
programmatore a
oggetti è abituato
• Scomodo per il
Debug
• Poco conosciuto
• Scarsa
documentazione
• Script lenti rispetto
al codice nativo
6. PROGRAMMATORE VS ENGINE
• Un’installazione completa di UDK fornisce
un’elevatissima quantità di classi e API già pronte a
essere utilizzate
• Possibilità di utilizzare il codice sorgente e le
risorse di Unreal Tournament
Per lo sviluppo del Gameplay bisogna avere le idee ben
chiare.
Al programmatore sono aperte due strade:
1 Riscrivere da capo solo il codice necessario
permette di avere codice pulito ed efficiente, ma
può richiedere moltissimo tempo
2 Estendere le proprie classi da quelle preesistenti
e aggiungere solo funzionalità specifiche metodo
più rapido, ma necessita di una buona comprensione
del funzionamento delle classi dell’Engine.
Moltissime funzionalità sono già
implementate!!!
7. CLASSI IN UNREAL ENGINE
• Classi Object:
• AnimNode
• Component
• GFxObject
• SequenceObjec
t
• SoundCue
• DamageType
• Classi Actor:
• Camera
• Controller
• Emitter
• HUD
• Inventory
• Pawn
• Trigger
Le classi in UnrealScript interagiscono tramite
riferimenti (quello che accade in Java)
Due categorie di classi differenti, che comportano
due Workflow diversi
8. PROGRAMMAZIONE DEL GAMEPLAY
• Progettazione di
regole e meccanismi
di Gameplay
• Implementazione di
un’Intelligenza
Artificiale
funzionale
• Gerarchie di classi
per i contenuti:
oggetti trigger, NPC,
armi, classi di
supporto, ecc.
• Interazione tra i
particellari e i
Pawn
9. PROGRAMMAZIONE DEL GAMEPLAY
• Algoritmi di posizionamento e rotazione della
Telecamera
• Generazione di feedback per l’Utente finale
(HUD)
• Inventario e sistema di upgrade degli oggetti
10. SUPPORTO ALLA PRODUZIONE DI ASSET
• Unrealscript permette la creazione di variabili e proprietà
modificabili da Editor
• Spesso si implementano funzionalità senza avere le risorse finali nei
package
Necessità di utilizzo di placeholder per finalità di testing del codice
class z_LeverTrigger extends Trigger;
//Trigger event bool
var bool used;
var bool bActive;
//prompt
var() const string Prompt;
//skeletal component
var(Lever) SkeletalMeshComponent LeverMesh;
var(Lever) DynamicLightEnvironmentComponent LightEnvironment;
var STPOutlineComponent OverlayComponent; //Glowing overlay
component
• I level designer non vogliono sapere
cosa fa funzionare tutto, ma sono
interessati ad avere classi e
componenti “out of the box” a cui
attaccare skin e materiali
• E’ importante utilizzare un alto
livello di astrazione, e affidarsi a
delle classi “Template” Si offre
agli altri reparti di produzione alta
flessibilità con modifiche minime a
livello Software
11. UNREALSCRIPT & PROPERTIES
class STP_Lovecraft extends STPPlayer;
//Subclass specific functions…
defaultproperties
{
//Lovecraft Specific Properties
PortraitMaterial=Material'STP_Interface.HUD.Materials.Character_Default_Prt'
Energy=150.0
EnergyMax=150.0
Health=150.0
HealthMax=150.0
EnergyRegenerationRatio=2.0 //Each second
HealthRegenerationRatio=1.0 //Each 0.5 seconds
//Lovecraft Character Mesh and Collision
Begin Object Name=WPawnSkeletalMeshComponent
SkeletalMesh=SkeletalMesh'STP_Char.Main.Lovecraft.Skel.Lovecraft_Skeletal'
AnimSets(0)
=AnimSet'STP_Char.Main.Lovecraft.Logic.Lovecraft_AnimSet’
AnimTreeTemplate=AnimTree'STP_Char.Main.Lovecraft.Logic.Lovecraft_AnimTree’
PhysicsAsset=PhysicsAsset'STP_Char.Main.Lovecraft.Logic.Lovecraft_Skeletal_Physic
s'
scale = 0.7
bEnableFullAnimWeightBodies = false
End Object
Mesh=WPawnSkeletalMeshComponent
Components.Add(WPawnSkeletalMeshComponent)
Begin Object Name=CollisionCylinder
CollisionRadius=+0020.000000
CollisionHeight=+0060.000000
End Object
CylinderComponent=CollisionCylinder
}
12. FLOW DEL GIOCO
Caricamento della mappa e impostazioni della tipologia di gioco.
Vengono caricate le classi Helper
Generazione di tutti gli Actor di gioco e collocazione sulla mappa
Creazione del Giocatore e del Controller di gioco
Spawn del Giocatore e inizio del Match
Gestione eventi generati
localmente o da NPC
Game Flow
Elaborazione degli
Input del giocatore
Rendering HUD Controllo NPC tramite IAGestione eventi temporali
13. UNREAL KISMET
• Permette la gestione di funzionalità specifiche di
un livello di gioco
• Eventi Cinematic
• Eventi generati da trigger (e.g. Apertura porte)
• I level designer non devono toccare il codice!
Vengono loro forniti i mezzi per gestire eventi
di gioco dall’Editor
• E’ possibile la creazione di nodi Custom specifici
per ogni necessità
• I nodi custom vengono automaticamente
riconosciuti da UDK (sottoclassi di
SequenceObject)
• Si possono far interagire nodi Kismet con
tutte le altre classi e funzioni già definite
• Nodi collegabili
tra loro:
• Nodo evento
• Nodo variabile
• Nodo azione
14. UNREAL KISMET
class HUDKismetSeqAct_MessageBox extends SeqAct_Latent;
event Activated()
{
// Collega questo elemento all'HUD
local PlayerController c;
c = GetWorldInfo().Game.GetALocalPlayerController();
if(c != none)
{
STPHud(c.MyHUD).Kismet_MessageBox = self;
STPHud(c.MyHUD).Kismet_MessageBox.ForceClose =
false;
startTimer = GetWorldInfo().TimeDilation;
}
}
15.
16.
17.
18.
19.
20.
21. FISICA E SIMULAZIONE
PHYSICS ASSETSCLOTH SYSTEMFRACTURED MESH
Nvidia Apex Technology
Generata con PhysLab
Semplice
Possibilità di usare una
texture per definire i
punti di cedimento della
mesh
Nvidia Apex
Technology/PhysX Clothing
System
Supporta Self collision
Apex: setup in Maya/3ds
Apex: permette collisione
tra cloth e rigid bodies del
character
Nvidia Apex Technology
Generata con PhysLab
Semplice
Possibilità di usare una
texture per definire i punti
di cedimento della mesh