Programmation avec Unreal Engine: Unreal Script
Mail: Stephane.Lavirotte@unice.fr 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
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/
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
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;
}
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
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.
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, …
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
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;
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
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)
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