Upload
codemotion
View
518
Download
5
Embed Size (px)
Citation preview
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
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
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
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!!!
CLASSI IN UNREAL ENGINE
• Classi Object:
• AnimNode
• Component
• GFxObject
• SequenceObject
• 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
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
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
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
UNREALSCRIPT & PROPERTIESclass STP_Lovecraft extends STPPlayer;
//Subclass specific functions…
defaultproperties{
//Lovecraft Specific PropertiesPortraitMaterial=Material'STP_Interface.HUD.Materials.Character_Default_Prt'Energy=150.0EnergyMax=150.0Health=150.0HealthMax=150.0EnergyRegenerationRatio=2.0 //Each secondHealthRegenerationRatio=1.0 //Each 0.5 seconds
//Lovecraft Character Mesh and CollisionBegin Object Name=WPawnSkeletalMeshComponentSkeletalMesh=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.7bEnableFullAnimWeightBodies = false
End Object
Mesh=WPawnSkeletalMeshComponentComponents.Add(WPawnSkeletalMeshComponent)
Begin Object Name=CollisionCylinderCollisionRadius=+0020.000000CollisionHeight=+0060.000000
End ObjectCylinderComponent=CollisionCylinder
}
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 FlowElaborazione degli Input del giocatore
Rendering HUD Controllo NPC tramite IAGestione eventi temporali
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
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;
}
}
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
ESPORTAZIONE DEL GIOCO
Default Engine
Default Game
UNREAL FRONTEND
CONTATTI
http://www.steampunkleague.net
http://www.dixidiasoft.com
@dixidiasoft - @steampunkleague
Mail: [email protected]