Programmation avec
Unreal Engine: Unreal Script
Mail: [email protected]
Web: http://stephane.lavirotte.com/
Université de Nice - Sophia Antipolis
Présentation et Auteur:
Stéphane Lavirotte
Donner vie à une création
Programmation Unreal Script
Stéphane Lavirotte 2
Unreal Engine: Le moteur du Jeu
Le Moteur de Unreal Tournament
– Unreal Engine 2: Unreal Tournament 2004
Disponible en téléchargement gratuit
– Unreal Engine 3: Unreal Tournament III
Disponible en beta depuis Octobre 2010
– Unreal Engine 4:…
Pas avant 2012 (et au maximum 2018…)
A ne pas confondre avec l’éditeur de Unreal (utilisé la
semaine dernière)
– UnrealEd 3.0 est l’éditeur de Unreal Tournament 2003 et 2004
– UnrealEd 4.0 est l’éditeur de Unreal Tournament III
Stéphane Lavirotte 3
Unreal Script
Langage de programmation dans lequel les ‘mods’
d’Unreal sont écrits
Conçu
– Par l’industrie du jeu
– Pour l’industrie du jeu
– Bien adapté pour les FPS
Caractéristiques du langage
– Langage Byte Compilé
– Interprété à l’exécution
Un langage Orienté Objet
– Syntaxe proche de JavaScript
Stéphane Lavirotte 4
Un Langage Puissant
Permet de faire des jeux très différents à partir de
Unreal Tournament
– Les Troopers de Star Wars dans UT2004
– Le Jeu de Foot / Guerre
http://www.deathball.net/
Stéphane Lavirotte 5
Utilisation de Unreal Engine 3
Dungeon Defenders
– Tower Defense / Action RPG
– http://dungeondefenders.com/
Whizzle
– Jeu Open Source (Psyonix Studio)
– Scrolling vertical, Puzzle / Action
– http://www.udk.com/showcase-whizzle
IntelliDrive
– Développé par le département US des
transports
– Simulation
– http://www.intellidriveusa.org/
11/14/2013 Stéphane Lavirotte 6
Avec Unreal Script
Structures de Base de
Programmation
Stéphane Lavirotte 7
Types de UnrealScript
Stéphane Lavirotte 8
Type KeyWord Déclaration Valeurs
Integer int var int myInt; 37, 2, -674, …
Floating Point float var int myFloat; 6.3432, -0,98, …
Boolean bool var bool myBoolean; true, false, 0, 1
Byte byte var byte myByte; 0 … 255
String string var string[32] myStr; "Hello"
Name name var name myName; ‘Tag’
Enumeration enum var EColor myEnum; Enum EColor { val1, val2, …};
Actor Reference
Class Reference class var class<Actor> myClass;
Structure struct var Box myBox; Struct Box { var type name; …}
Structures de Contrôle: Tests
Structures de contrôle – Conditionnel
if ([expression1] [operator] [expression2]) {
Do some stuff here;
} else if ([expression1] [operator] [expression2]) {
Do other stuff here;
} else {
Do something else;
}
– Aiguillage switch ( Developer ) {
case "Tim" :
Do Stuff;
break;
default:
Do stuff;
break;
}
Stéphane Lavirotte 9
Structures de Contrôle: Boucles
Structures de contrôle – Boucle for
for ( i=0; i<5; i++ ) {
Do stuff;
}
– Boucle do
do {
Do stuff;
i++;
} until (i == 5);
– Boucle while
while ( i < 5 ) {
Do stuff;
i++;
}
Stéphane Lavirotte 10
Une classe c’est la classe !
Un Langage de Script
Orienté Objet
Stéphane Lavirotte 11
Programmation Orientée Objet
But: – Regrouper les données et les moyens de les traiter
Notions: – Objet:
Rassemble deux éléments de programmation procédurale
– variables = champs
– fonctions = méthodes
Membres
– Classe
L’objet est une instance de classe
Fondamentaux de la Programmation Orientée Objet – Encapsulation
– Héritage
– Polymorphisme
11/14/2013 Stéphane Lavirotte 12
Héritage
Ce concept d'héritage ouvre donc la porte à un
nouveau genre de programmation.
11/14/2013 Stéphane Lavirotte 13
Polymorphisme
Le polymorphisme traite de la capacité de l'objet
– à posséder plusieurs formes
– à modifier son comportement propre et celui de ses
descendants au cours de l'exécution
Dérive directement du principe d'héritage
Pouvoir redéfinir une méthode
– afin de la réécrire
– de la compléter
Attention: ne doit pas être confondu avec celui
d'héritage multiple
11/14/2013 Stéphane Lavirotte 14
Différents Types de Méthodes
Constructeur
– Construire l'objet en mémoire (initialiser les champs, …)
– Possibilité de ne pas avoir de constructeur explicite
Destructeur
– Détruire l'instance de l'objet
– Possibilité de ne pas avoir de destructeur explicite
Pointeur interne
– objets sont utilisés de manière dynamique, et ne sont donc
créés que lors de l'exécution
– indispensable pour un objet de pouvoir se
référencer lui-même
– this en C++, self en Python, …
11/14/2013 Stéphane Lavirotte 15
Visibilité
Champs et méthodes publics
– Pas de restriction particulière
– accessibles depuis tous les descendants et dans tous les
modules
– Attention: Un champ ne devra être public que si sa
modification n'entraîne pas de changement dans le
comportement de l'objet. Sinon, appel par une méthode
Champs et méthodes privés
– restreint la portée d'un champ ou d'une méthode au module
où il ou elle est déclaré(e)
Champs et méthodes protégés
– correspond à la visibilité privée excepté que tout champ ou
méthode protégé(e) est accessible dans tous les descendants,
quel que soit le module où ils se situent
11/14/2013 Stéphane Lavirotte 16
Unreal Script: Un Langage
Orienté Objet Chaque fichier de script est
considérée comme une classe – Dédié à une tache
particulière
– N'effectue que cette tache
– Permet d'avoir un langage clair et pratique
Toutes les classes dérivent de la classe Object – Mais on utilise
principalement la classe Actor (case à cocher)
– Chaque classe dérive de la classe qui la précède
– Si on créé une nouvelle arme, on étant la classe Weapon existante
Stéphane Lavirotte 17
Syntaxe d’UnrealScript
Déclaration d’une classe – class name_class extends parent_class [placeable];
– class name_class expands parent_class [placeable];
Déclaration d’une variable – var type_var name_var ;
Déclaration d’une variable locale – local type_var name_var;
Déclaration de propriété par défaut – var (defaut_group) type_var name_var;
Déclaration d’une fonction – function type_return name_func( type_param name_param )
{
return value;
}
Stéphane Lavirotte 18
Etats
Portion de code qui n’est exécutée que si la classe se trouve dans cet état
Exemple: états possible d’une arme – tir (fire), tir alternatif (alt-fire), rechargement (reloading), non
utilisée (idle)
Exemple d’utilisation – Si on souhaite faire une animation toutes les 30 secondes si
l’arme n’est pas utilisée
– Vous pouvez consulter l’état idle de la classe Weapon et y ajouter ce comportement
Arrêter l’exécution de fonctions quand on est dans un état – Ex: Ne pas pouvoir faire feu quand on recharge l’arme – ignores Fire, AltFire;
Stéphane Lavirotte 19
Outils pour le Développement
UnrealED est peu développé pour l’édition de code
– Visualisation de la hiérarchie des classes
– Visualisation des paquettages
– Application basique d’édition de code
– Cache les propriétés par défaut dans le code pour les afficher
dans la boîte des proriétés
Un environnement plus conséquent est disponible:
– WOTGreal
– http://www.wotgreal.com/
– Un « vrai IDE »:
gestion des paquetages, des classes,
édition de code plus facile,
compilation, …
Stéphane Lavirotte 20
FAQ
Quelques informations utiles
pour le TD
Stéphane Lavirotte 21
Quelques Classes Importantes
Pawn.uc (ou toute classe dérivée)
– Acteurs qui peuvent être contrôlé par l’utilisateur, une AI, un
script, …
Controllers.uc (ou toute classe dérivée)
– Contrôle un Pawn dans UE.
– Implémentation de Bots dans UT2004 (AIController) ou
interface de contrôle utilisateur (PlayerController)
GameInfo.uc (et toute classe dérivée)
– Implémente toutes les variantes de jeu
HUD.uc (et toute classé dérivée)
– Dessine le « Heads Up Display » à l’écran
Correspond à l'ensemble des informations affichées à l'écran
pendant une partie (niveau de vie, armures, armes, …)
Stéphane Lavirotte 22
Personnage
La Partie la plus dure est de faire la modélisation 3D
– Création des animations pour tous les mouvements
Marcher, courir, sauter, nager, …
– Fournit dans un fichier UKX dans le dossier Animations
Créer la classe définissant les comportements
– Comportement générique défini dans une classe
(ExamplePawn)
– Les sous-classes vont permettre de créer différents
personnages ayant les même comportements (ExampleBoy,
ExampleGirl)
Stéphane Lavirotte 23
Association des Animations
Avancer: MovementAnims[0]
Reculer: MovementAnims[1]
Gauche: MovementAnims[2]
Droite: MovementAnims[3]
Tourner à Gauche: TurnLeftAnim
Tourner à Droite: TurnRightAnim
Stéphane Lavirotte 24
Top Related