SlideShare une entreprise Scribd logo
1  sur  33
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
• 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
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 & 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
}
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
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: info@dixidiasoft.com

Contenu connexe

Similaire à Pregi e difetti dello sviluppo di videogames con Unreal Development Kit: Steampunk League dal concept al gioco by Siro Toracchio

OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLFrancesco Garofalo
 
Unity 3D a C# developer's POV
Unity 3D a C# developer's POVUnity 3D a C# developer's POV
Unity 3D a C# developer's POVLeonardo Alario
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaXPeppers
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed ComputingIdriss Riouak
 
Windows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazioneWindows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazioneMatteo Pagani
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerMarco Parenzan
 
.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018Fabrizio Bernabei
 
Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Massimo Bonanni
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaVitalij Zadneprovskij
 
Present kinect4 windows
Present kinect4 windowsPresent kinect4 windows
Present kinect4 windowsI3P
 
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisjekil
 
Kinect and brave new applications
Kinect and brave new applicationsKinect and brave new applications
Kinect and brave new applicationsIgor Antonacci
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Provarsi i vestiti con il kinect
Provarsi i vestiti con il kinectProvarsi i vestiti con il kinect
Provarsi i vestiti con il kinectEmanuele Bartolesi
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoMavigex srl
 

Similaire à Pregi e difetti dello sviluppo di videogames con Unreal Development Kit: Steampunk League dal concept al gioco by Siro Toracchio (20)

OpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCLOpenCL - Introduzione al framework OpenCL
OpenCL - Introduzione al framework OpenCL
 
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Unity 3D a C# developer's POV
Unity 3D a C# developer's POVUnity 3D a C# developer's POV
Unity 3D a C# developer's POV
 
Agileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastrutturaAgileday2013 pratiche agili applicate all'infrastruttura
Agileday2013 pratiche agili applicate all'infrastruttura
 
Thanatos - Parallel & Distributed Computing
Thanatos -  Parallel & Distributed ComputingThanatos -  Parallel & Distributed Computing
Thanatos - Parallel & Distributed Computing
 
Thanatos
ThanatosThanatos
Thanatos
 
VS Package @ CD2008
VS Package @ CD2008VS Package @ CD2008
VS Package @ CD2008
 
Windows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazioneWindows Phone 7.5 Refresh: Performance e localizzazione
Windows Phone 7.5 Refresh: Performance e localizzazione
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed Programmer
 
.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018
 
Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2 Applicazioni Windows Store con Kinect 2
Applicazioni Windows Store con Kinect 2
 
Iced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java liberaIced tea, la macchina virtuale Java libera
Iced tea, la macchina virtuale Java libera
 
Present kinect4 windows
Present kinect4 windowsPresent kinect4 windows
Present kinect4 windows
 
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysis
 
Kinect and brave new applications
Kinect and brave new applicationsKinect and brave new applications
Kinect and brave new applications
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Provarsi i vestiti con il kinect
Provarsi i vestiti con il kinectProvarsi i vestiti con il kinect
Provarsi i vestiti con il kinect
 
Presentazione tesi 2.0
Presentazione tesi 2.0Presentazione tesi 2.0
Presentazione tesi 2.0
 
SkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimentoSkyMedia: La tecnologia al servizio dell'intrattenimento
SkyMedia: La tecnologia al servizio dell'intrattenimento
 
Benchmark linux
Benchmark linuxBenchmark linux
Benchmark linux
 

Plus de Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
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
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30. ESPORTAZIONE DEL GIOCO Default Engine Default Game
  • 32.