Académique Documents
Professionnel Documents
Culture Documents
www.siteduzero.com
2/235
Sommaire
Sommaire ........................................................................................................................................... Lire aussi ............................................................................................................................................ Ralisez votre jeu vido avec UDK .................................................................................................... Partie 1 : Introduction, installation ....................................................................................................... 2 5 7 9
L'clairage ....................................................................................................................................................................... 35
Eclairage statique, clairage dynamique .................................................................................................................................................................. 36 L'clairage statique ................................................................................................................................................................................................... 36 L'clairage dynamique .............................................................................................................................................................................................. 36 Les ombres ............................................................................................................................................................................................................... 37 Et dans UDK ? ........................................................................................................................................................................................................... 37 Les sources de lumire ............................................................................................................................................................................................. 37 Les principaux rglages des lumires ....................................................................................................................................................................... 37 Ajouter une lumire dans la map .............................................................................................................................................................................. 37 Plus d'informations .................................................................................................................................................................................................... 39 Lightmass : l'clairage haut de gamme ..................................................................................................................................................................... 39 L'Ambiant Occlusion .................................................................................................................................................................................................. 39 Le rglage global de Lightmass ................................................................................................................................................................................ 39 Effets avancs ........................................................................................................................................................................................................... 40 Pour aller plus loin ..................................................................................................................................................................................................... 42
www.siteduzero.com
Sommaire
3/235
45 47 50 50 50 52 53 53 53
Faire clignoter une lumire avec Kismet ................................................................................................................................................................... Le dclencheur d'une action : l'Event ........................................................................................................................................................................ Modifier la vitesse de clignotement ........................................................................................................................................................................... Des dclencheurs avec les volumes ......................................................................................................................................................................... Crer une zone sans gravit avec un volume ........................................................................................................................................................... Utiliser un volume comme trigger .............................................................................................................................................................................. Sources ..................................................................................................................................................................................................................... Ce que vous savez faire ............................................................................................................................................................................................ Conclusion ................................................................................................................................................................................................................
www.siteduzero.com
Sommaire
4/235
106 106 106 107 110 112
Les Physical Material .............................................................................................................................................................................................. Un matriau dynamique .......................................................................................................................................................................................... Pour commencer : les textures ............................................................................................................................................................................... Le matriau dans UDK ............................................................................................................................................................................................ Instances et paramtres .......................................................................................................................................................................................... Aller plus loin avec les matriaux ............................................................................................................................................................................
www.siteduzero.com
Sommaire
5/235
Vous vous souvenez des sockets ? ........................................................................................................................................................................ 156 Tlchargez le Burner Rifle ..................................................................................................................................................................................... 157
www.siteduzero.com
Lire aussi
6/235
Pour aller plus loin ................................................................................................................................................................................................... 215 Raliser un menu de pause .................................................................................................................................................................................... 215 Introduction .............................................................................................................................................................................................................. 215 Une TP pour votre HUD .......................................................................................................................................................................................... 216 Pour aller plus loin... ................................................................................................................................................................................................ 220 Un menu ractif aux objets ..................................................................................................................................................................................... 220 Un TP pour conclure ............................................................................................................................................................................................... 220 lments d'aide ....................................................................................................................................................................................................... 220
www.siteduzero.com
Lire aussi
7/235
Par
Vous rvez de raliser un jeu vido aux graphismes exceptionnels, mais vous ne savez pas comment vous y prendre ?
Un FPS, un jeu de stratgie pour PC et Mac, ou un mini-jeu en 3D pour iPhone ? Tout a est possible... V ous tes au bon endroit : Unreal Development Kit est un moteur de jeu gratuit, multiplateforme, un des leaders mondiaux dans le jeu vido. Utilis avant tout par les professionnels, il est depuis quelques annes ouvert tous et l'aide de ce cours, vous pouvez apprendre le matriser. Ce tutoriel vous permet de dbuter avec UDK et crer votre propre jeu vido. V ous pourrez dessiner votre univers avec les logiciels classiques du graphisme (Blender, Maya, Photoshop, Flash...) et en faire des environnements jouables en multijoueurs avec vos propres rgles de jeu, crer vos vhicules, vos armes... Tout est possible. Ce sont les outils des plus grands studios de jeu vido qui sont prsents ici ! Le tutoriel s'architecture autour de plusieurs grandes parties, toutes essentielles dans la construction d'un jeu vido moderne. Pour commencer, vous apprendrez les bases de la cration d'un jeu avec UDK. Ensuite, vous dcouvrirez comment raliser vos propres dcors, vos objets, vos sons. Une fois ces bases jetes, vous apprendrez la programmation pour le jeu vido : armes, lments de jeu... Enfin, une dernire partie vous aidera crer une interface de jeu, pour crer vos menus et autres informations l'cran.
www.siteduzero.com
8/235
www.siteduzero.com
9/235
Comme vous le voyez, on parle de trs gros titres commerciaux. Mais saviez-vous que ce moteur est dsormais gratuit?
Encore mieux: vous pouvez vendre des jeux commerciaux avec. V ous devrez cependant vous acquitter de 99$, puis, pass 50 000$ de revenus commerciaux, Epic Games en percevra 25%. Au del des chiffres, ce qui compte pour vous, c'est que vous avez votre disposition un outil fiable- pour preuve ses 15 ans d'existence- bien document et extrmement puissant !
Un peu d'histoire...
Le moteur Unreal Engine n'est pas vraiment un petit nouveau puisqu'il a fait son apparition en 1998, pour le jeu vido Unreal dvelopp par Epic Games - puis le clbre Unreal Tournament qui assurera une visibilit norme ce moteur.
L'Unreal Engine
Dj techniquement trs en avance, Unreal Engine dans sa premire mouture gre l'clairage dynamique et mme le rendu en temps rel dans l'diteur, technique dont l'introduction n'est que trs rcente dans le moteur Source par exemple. A cette poque, la notion de moteur de jeu n'est qu'une bonne pratique de dveloppement. Pour des raisons de concurrence, chaque socit dveloppait l'ensemble de son code. Mais nous reviendrons l-dessus par la suite. Unreal Engine proposait galement ds sa premire version un langage de script propritaire, Unreal Script, qui facilite le dveloppement puisqu'il permet d'oublier la gestion du matriel.
Unreal Engine 2 et 3
Unreal Engine 2 est la premire mise jour du moteur. Elle intervient en 2002, ce qui est un cycle assez court pour un systme aussi complexe. Cette nouvelle version apporte la gestion de la physique, domaine alors en plein essor dans le jeu vido (Half-Life 2 suivra quelques annes plus tard). Et, pour la premire fois, le moteur devient multiplateforme puisqu'il fonctionnera sous XBox et GameCube ! Unreal Engine 3 sera rvl en 2007, avec Unreal Tournament 3, Gears of War 2 et de nombreux jeux qui suivront. En effet, Unreal Engine 3 est l'occasion pour Epic Games de proposer son moteur comme base de travail aux studios de jeu vido, moteur qui rencontrera un succs considrable ! Ct technique, UE3 apporte les ombres dynamiques, une physique amliore qui embarque un support de PhysX, l'API de nVidia pour la physique via CUDA, ainsi qu'un bon nombre d'optimisations.
www.siteduzero.com
10/235
L'arrive d'UDK
Enfin, fin novembre 2009, Epic Games annonce l'arrive d'une version mise jour du moteur Unreal Engine sous la forme de l'Unreal Development Kit, ainsi qu'un changement considrable de la politique de licence. En effet, UDK est gratuit pour un usage non commercial, ce qui fait de ce moteur une rfrence dans le monde du modding ! Il s'agit de l'Unreal Engine 3 , mis jour, avec tous les outils proposs au professionnels, sans limitation.
Capacits et performances
V ous pouvez d'ores et dj trouver toutes les informations ncessaires sur UDK sur le site officiel : http://www.udk.com On va commencer ce cours par un rcapitulatif des fonctions qui existent dans ce moteur.
Rendu graphique
Les principales caractristiques du rendu d'UDK sont les suivantes : Matriaux complexes : normal mapping, displacement mapping, et un diteur de matriaux trs performant, temps rel et graphique ; clairage temps rel perfectionn, compltement dynamique y compris dans l'diteur ; Systmes de particules puissants, associs un diteur graphique ; Terrains, vgtation automatique avec les SpeedTree ; Moteur physique, environnement destructible ; Bink, un moteur de vido performant ; Interfaces graphiques avances avec Scaleform : menus en 3D, vidos, effets visuels avec Flash... Scaleform est employ par la majorit des jeux vido gros budget d'aujourd'hui !
www.siteduzero.com
11/235
Gestion du contenu
Tout le contenu du jeu vido est exploitable directement dans un seul outil, UDK Editor. Il est possible d'importer du contenu trs facilement depuis Blender, Maya, Adobe Photoshop, Adobe Flash... En quelques clics. Il est possible de crer des lments qui "hritent" d'autres lments, comme en programmation, par exemple pour les matriaux.
Fonctionnalits de jeu
UDK vous apporte les fonctions suivantes pour le jeu lui-mme : Gestion de l'IA ; Gestion du rseau ; Programmation soit avec UnrealScript pour modifier le gameplay soit avec Kismet, un langage graphique, pour grer les cinmatiques ; Gestion du son ; Outils de publication, serveur ddi...
Plateformes supportes
Les plateformes supportes sont les suivantes : PC (Windows) ; Mac OSX ; iPhone ; Les consoles XBox 360 et PS3 sont supportes par l'Unreal Engine galement, mais pas par UDK pour des raisons lies au modle financier de ces systmes. Distribuer un jeu pour console vous coterait extrmement cher.
www.siteduzero.com
12/235
www.siteduzero.com
13/235
En revanche, si vous tes graphistes, vous analysez les images, vous comprenez les effets recherchs, le sens des symboles et des mises en scne, vous savez choisir des couleurs ou composer une scne. Et si enfin vous tes un joueur, ce que vous savez faire c'est gagner ! Le problme du jeu vido c'est la mise en commun de ces diffrents savoirs. Un jeu vido russi est obligatoirement le rsultat de diffrents travaux, aussi bien sur la programmation, sur l'art, ou sur le gameplay. Or, deux problmes se prsentent : Personne n'excelle dans tous ces domaines ; Ces domaines sont suffisamment diffrents pour que les gens ne se comprennent pas.
C'est l qu'intervient le concept de moteur de jeu. Le moteur est un environnement de dveloppement (l'quivalent par exemple de Visual Studio, Eclipse ou Code::Blocks en programmation), qui embarque gnralement la plupart des fonctionnalits prsentes prcdemment. Son objectif est multiple : Fournir une interface simple au matriel : hors de question dans UDK de penser OpenGL, de penser rafrachissement, code bas niveau, gestion mmoire. Tout a, c'est fait une bonne fois pour toutes! a ne sert rien de rinventer la roue chaque jeu vido, les programmes que vous crirez pour UDK se baseront sur une bibliothque bas niveau bien fournie ; Permettre aux crateurs de manipuler facilement le contenu : vous crez vos lments de jeu dans votre logiciel favori (aussi bien du son et de l'image que des objets en 3D), vous les importez facilement dans le moteur, et vous ne vous en proccupez plus : mme si vous avez fabriqu un vhicule trs compliqu, une fois dans l'diteur de maps, vous n'avez que quelques clics faire pour le mettre en place ; Centraliser tout le dveloppement : un seul logiciel pour tout faire.
www.siteduzero.com
14/235
Il est donc important de comprendre qu'un logiciel comme UDK est en fait un ensemble de diffrents outils, fdrs sous une seule interface, et qui permettent de crer votre jeu. Il n'est pas li un jeu prcis, et c'est la fois le programme qui est la base du jeu, et l'diteur que vous allez utiliser pour le crer. Pour crer un jeu vido avec UDK, vous allez donc programmer, crer des objets visuels, des sons... Et tout intgrer en un jeu vido.
Un systme de particules dans UDK : mme pour des effets avancs, la cration graphique ne requiert pas de programmation
www.siteduzero.com
15/235
www.siteduzero.com
16/235
Tlchargement
UDK est disponible au tlchargement sans aucune formalit. C'est par ici que a se passe ! Eh, c'est en anglais!
Oui... Et c'est peut-tre la premire chose qui va vous faire peur avec UDK : tout sera toujours en anglais ! Rassurez-vous, nul besoin d'tre bilingue, comme dans tout domaine de l'informatique vous allez peu peu dcouvrir le vocabulaire: material, mesh, actor, tous ces termes obscurs n'auront bientt plus de secrets pour vous. J'utiliserai dans ce cours un maximum de termes anglais, pour que vous vous retrouviez dans l'interface, et que vous puissiez faire des recherches en anglais.
V ous devriez choisir la version la plus rcente. Il y a des mises jour rgulires, mais celles-ci ne devraient pas trop modifier le fonctionnement. V ous pouvez donc utiliser une version plus jour que celle utilise pour ce cours, en revanche mfiez-vous des plus anciennes. A l'criture de ce cours, la version en ligne est February 2012 : c'est donc cette version qui est employe ici. Bien sr, de nouvelles versions sont sorties depuis, mais il est impossible de suivre chaque mise jour en dtail : sachez vous adapter si par hasard le cours semble dvier du logiciel !
L'installation est relativement vidente, je ne vous ferai pas l'insulte de la dtailler. Il vous suffit d'installer UDK l o vous avez de la place sur votre machine.
La documentation
UDK est un moteur qui dispose d'une communaut importante.
www.siteduzero.com
17/235
Par consquent, si vous avez le moindre problme, commencez par faire une recherche ! V ous aurez coup sr des rponses sur Internet. V oici la documentation officielle d'UDK : Unreal Development Network. C'est en anglais bien sr, et pas toujours trs lisible, cependant c'est la source de rfrence pour tous vos problmes ! L'ensemble de ce cours se base sur cette documentation complte faite par les crateurs d'UDK. Epic Games dispose aussi d'un forum, en anglais galement, ddi UDK : Forums UDK. Si aucune rponse n'est propose dans la documentation, faites une recherche sur ce forum ! Gnralement, quelqu'un a rencontr le mme problme avant vous. Enfin, UDN propose une norme quantit de cours en vido sur UDK : Tutoriels vido Avec toute cette documentation, vous pouvez tout apprendre. Si vous rencontrez un problme quelconque dans ce cours et dans cette partie en particulier, n'hsitez jamais faire d'abord une recherche pour dterminer les raisons possibles. Il peut galement arriver que la version la plus rcente d'UDK introduise un bug: en pareil cas, et en dernier recours, installez une autre version pour vrifier.
Ensuite, il vous suffit de choisir dans l'onglet Map une des nombreuses dmos du jeu : Deck : un classique d'Unreal Tournament, jouable avec les bots ; ExampleMap : une dmo de script assez rapide ; EpicCitadel : une dmo de jeu pour iPhone (si, si) qui a des graphismes impressionnants ; JazzMiniGame et KismetTutorial, pas intressantes pour l'instant ; SimpleCourtYard : comme son nom l'indique, une simple cour, peu intressante pour l'instant ; FoliageMap : une dmo technique de vgtation, voir par curiosit ; NightAndDayMap : c'est LA dmo d'UDK, voir absolument ! Enfin, cliquez sur Start Game pour lancer, et amusez-vous bien. Comment on se dplace ?
www.siteduzero.com
18/235
Comme dans tout FPS : Z, Q, S, D ! Les touches de dplacement en avant et gauche ne marchent pas !
Si c'est le cas, UDK est en mode QWERTY ... Appuyez sur ALT et SHIFT en mme temps pour passer votre clavier dans ce mode. N'oubliez pas de revenir en arrire avec la mme combinaison une fois le jeu termin, ou vous aurez d'tranges surprises en modifiant les proprits des objets...
UDK Editor
On passe aux choses srieuses maintenant ? Lancez UDK Editor . Cette fois, c'est moins beau et surtout plus complexe, alors c'est parti pour une prsentation de votre nouvel outil de travail !
La fentre dans laquelle vous dmarrez s'appelle le Content Browser. C'est comme l'explorateur Windows, mais vous y retrouverez uniquement le contenu de jeu que vous y avez ajout, ainsi que celui qui est fourni par dfaut. Pour l'instant, c'est un peu compliqu : on va donc le fermer. Pas d'inquitudes : on va rapidement en parler. Et maintenant, vous devriez voir apparatre l'interface principale d'UDK Editor. C'est parti pour un plan ! Si vous voyez une seule vue, la vue 3D, vous devez cliquer sur le bouton Restore en haut droite de celle-ci.
www.siteduzero.com
19/235
N'ayez pas peur : tout a est relativement simple. L'diteur dispose de 4 vues: 3 vues plat, une vue en 3D. V ous pouvez modifier ces rglages, mais vitons pour l'instant. Chaque vue dispose d'une barre d'outils permettant de modifier ses rglages. La barre d'outils latrale va nous servir crer des objets basiques dans les maps. V ous avez un bouton pour rejoindre le Content Browser, qui vous servira normment par la suite. V ous avez enfin, dans chaque vue, un bouton pour lancer le jeu depuis l'diteur; ainsi que le mme bouton, plus haut, mais de couleur verte, qui lance le jeu dans une nouvelle fentre! Appuyez donc dessus...
Et voil, vous pouvez vous dplacer ! Et nous allons pouvoir commencer la seconde partie de ce cours, avec votre premire map. V ous devriez maintenant avoir votre disposition UDK et tous ses outils. Bien sr, pour l'instant vous ne savez pas vous en servir, mais pas de panique ! Tous ces outils s'apprennent peu peu et nous allons les dtailler dans la suite.
www.siteduzero.com
20/235
www.siteduzero.com
21/235
www.siteduzero.com
22/235
Diffrentes ambiances, vous de choisir! V ous devriez obtenir une map d'exemple, avec un cube, des murs blancs. Pas de soucis, tout est prt !
Le Builder Brush!
www.siteduzero.com
23/235
Le Builder Brush est un outil, pas un objet de votre map. Il n'existe pas rellement : c'est juste une sorte de moule que vous allez modifier votre guise, et qui vous permettra de crer des blocs rels. On va tudier un peu la liste des outils qui nous permettent de modifier celui-ci.
Brushes
Dans l'onglet Brushes, vous disposez des formes basiques disponibles. Celles-ci vous seront trs utiles pour raliser une map de test trs rapidement, ce qui est justement notre objectif ! Ces formes basiques, si vous cliquez droit dessus, vous proposeront de rgler directement les dimensions du Builder Brush.
X, Y et Z sont les dimensions sur chacun de ces axes ; choisissez systmatiquement une puissance de 2 (256, 512, 1024...) ! Wall Thickness rgle l'paisseur d'un mur, si vous choisissez l'option Hollow le Builder Brush sera en effet creux, avec un mur de l'paisseur spcifie.
CSG
L'onglet CSG est galement trs important puisqu'il va nous permettre de crer de la gomtrie relle partir de la forme actuelle du Builder Brush. Concrtement, ces boutons appliquent les modifications que vous faites sur le Builder Brush, ils font "sortir du moule" l'objet que vous avez dessin. Une petite liste de leurs fonctions : CSG Add: vous allez l'utiliser 90% du temps! Cette fonction ajoute un bloc de gomtrie de la forme actuelle du Builder Brush ; CSG Substract: rarement utile de nos jours, ralise l'opration inverse, qui ne consiste pas annuler la prcdente, mais bien faire l'inverse. V ous pouvez par exemple faire une entaille dans un bloc cr prcdemment avec Add ; Intersect et Deintersect: encore moins souvent utiles, je ne vous les infligerai pas.
Volumes
L'onglet Volumes, et en partie le bouton de droite Add Volume, est probablement l'outil du Builder Brush que vous utiliserez le plus dans une map srieuse. Il vous permet de crer des Volumes , des zones qui auront un effet particulier : mort du joueur, lumire, collisions, vnements sont autant d'exemples classiques de son usage.
www.siteduzero.com
24/235
V ous devriez pouvoir dplacer votre bloc comme ceci, l'aide des flches:
Il faut cliquer sur une flche, maintenir enfonc le bouton et dplacer votre souris pour bouger le Builder Brush. Maintenant, vous n'avez plus qu' cliquer sur CSG Add :
Et voil, votre premier bloc est en place ! Comme vous le constatez, la texture (on parlera plutt de Material ) est un damier blanc/bleu, c'est le Material par dfaut dans UDK. Ne vous inquitez pas, a se change.
www.siteduzero.com
25/235
Maintenant, rptez l'opration pour entourer le point de dpart du joueur... Le point de dpart, c'est ce petit symbole, nomm PlayerStart :
Un point de dpart de joueur : c'est ici que vous apparaissez quand le jeu commence ! Dplacez le Builder Brush, ajoutez la gomtrie chaque fois et construisez un mur, en respectant bien la grille !
Je ne me suis pas servi du bloc initial, c'est un dtail, vous pouvez l'incorporer dans votre uvre.
Construire et jouer
Il ne faut pas ici comprendre "Construire", ou Build dans UDK comme pour un programme. C'est plutt une squence d'optimisation automatique que nous allons faire. Pour l'instant, tout se passe bien, mais vous allez vite vous rendre compte que si vous supprimez un des blocs bleus que vous avez cr, il ne disparatra pas ! C'est normal : pour mettre ceci jour, il faut refaire le Build de la gomtrie, et ensuite de l'clairage : si vous tes habitus la 3D, vous savez probablement qu'avant de voir une scne claire, il faut simuler, calculer l'clairage de cette dernire. Il existe un bouton pour ce faire. V ous vous souvenez de ma prsentation de l'interface ?
Dans l'ordre des boutons, de gauche droite: Construire la gomtrie ; Construire l'clairage ; Construire les chemins des bots ;
www.siteduzero.com
26/235
Pendant la reconstruction, une fentre Swarm Agent va s'ouvrir. C'est l'outil de rendu distribu, qui permet de lancer la simulation de l'clairage sur plusieurs machines en mme temps. Pour l'instant vous n'utilisez qu'une seule machine, et il vous suffit de savoir que ce logiciel ralise votre clairage. V ous pouvez le fermer quand il indique 100%. Une fois la reconstruction termine, la fentre Map Check apparatra avec un rcapitulatif des erreurs, warnings et informations qu'UDK veut vous communiquer. V ous aurez probablement des messages d'erreur plus ou moins louches au fil de votre travail. Pour l'instant, ignorez-les, ils n'ont aucune importance ici. Si UDK vous demande une confirmation, validez.
Et a y est, vous pouvez appuyer sur F8 et vous promener dans votre uvre! J'ai un message d'erreur bizarre !
Oui, vous voulez continuer. C'est un bug d'UDK qui apparat dans certaines versions. Pour l'instant, c'est inoffensif. Ce message indique que le contenu que vous utilisez ne sera pas prsent si vous lancez cette map depuis UDK Game. Nous verrons plus tard comment faire. Appuyer sur ECHAP pour quitter le jeu de l'diteur quand vous avez fini.
Un dernier commentaire
A partir de maintenant, on appellera BSP la gomtrie cre de cette faon. Le mot va tre expliqu plus loin, contentez-vous de le retenir !
Le Content Browser
Dcouvrons ensemble cet outil qui vous permet de grer l'ensemble de votre contenu! Pour l'ouvrir, cliquez sur le U gris sur noir dans la barre d'outils de la fentre principale, ou appuyez sur CTRL + SHIFT + F.
www.siteduzero.com
27/235
Le Content Browser est dcoup en trois principales parties : A gauche, une barre de navigation, elle-mme divise en trois sections : Shared Collections : ce sont les principales catgories d'objets utiles, dont UDK Building Meshes : ce sont nos fameux Static Meshes ; My Collections : exactement pareil, mais c'est vous qui dfinirez ce que vous voulez y mettre ; Packages : la liste des packages UDK. Un package est un gros fichier qui comporte du contenu import depuis l'extrieur. Gnralement chaque package a un thme particulier ; En haut, les filtres d'affichage, qui vont vous permettre de slectionner le type de contenu que vous voulez voir. Ici, vous devriez cocher Static Meshes dans Object Type. En bas, la liste des objets trouvs, tout simplement ! Pas d'inquitudes, tout a va vite devenir vident pour vous.
www.siteduzero.com
28/235
V ous pouvez observer le model sous tous les angles avec les mmes contrles que la vue principale: clic droit maintenu pour tourner, clic gauche pour le zoom... On ne s'attardera pas dans cette vue qui sera dtaille par la suite.
Cela signifie soit que vous n'avez pas slectionn un Static Mesh, en cliquant dessus une fois dans le Content Browser ; ou que le package qui le contient n'est pas charg. Si c'est le cas, vous avez probablement oubli l'tape Fully Load.
Mise en position
Maintenant, vous de dplacer le Static Mesh comme vous l'avez fait pour le Builder Brush, cette fois avec quelques fonctions en plus. La touche ESPACE vous permet de choisir l'action raliser: dplacement, rotation, changement d'chelle... C'est un raccourci trs
www.siteduzero.com
29/235
pratique. Une autre astuce indispensable, cette fois-ci avec la touche ALT : maintenez-la enfonce pendant que vous dplacez un objet pour ddoubler un objet. Aidez-vous de la grille et des diffrentes vues pour obtenir le bon positionnement. C'est l'occasion de tout essayer : n'hsitez pas tester tout ce que vous voulez !
Terminer la map
N'hsitez pas recommencer la manipulation pour d'autres meshs. Comme vous allez vite le constater, les Static Meshs font souvent exactement les dimensions de vos cubes. Ce n'est pas du tout un hasard: c'est ce qu'on appelle un dveloppement modulaire. Idalement, vous pouvez cacher compltement les blocs que vous avez raliss tout l'heure. Une fois que vous avez fini, reconstruisez la map, sauvegardez-la et lancez le jeu avec F8. V ous devriez avoir votre map complte !
Avantages
Les avantages de BSP sont les suivants : Trs simple implmenter ; Trs simple utiliser par le dveloppeur. Quand vous cliquez sur CSG Add dans UDK, vous mettez tout simplement les cubes slectionns "PLEIN" ! Et ces cubes, c'est la grille qui apparat dans le logiciel qui les reprsente ! V ous avez utilis BSP tout l'heure, mais sans le savoir... Extrmement performant : en 1998, croyez-moi, Crysis n'aurait pas eu beaucoup de clients ; Facile optimiser ;
www.siteduzero.com
30/235
Gomtrie soustractive
Encore un terme barbare... Mais celui-ci est galement trs simple: vous vous rappelez du bouton CSG Substract ? En fait, jusqu' Unreal Engine 3, les niveaux taient raliss en creux: par dfaut, l'espace tait compltement plein. V ous avez remarqu que, dans Unreal Tournament, quasiment tous les niveaux se trouvent dans des tunnels, des grottes, des btiments ?
Aujourd'hui cependant, la mode est aux environnements ouverts, et UDK vous proposera par dfaut des niveaux en gomtrie additive. Mais il est bon de comprendre l'histoire du moteur parce que a vous aide en apprhender le mcanisme. Il est peu utile de s'attarder plus longtemps sur BSP: il n'y a vraiment rien de plus dire ! Comme vous le voyez, c'est un concept lmentaire, que vous avez mani sans le savoir dans la partie prcdente.
Les models
La mauvaise nouvelle c'est que BSP est une technologie dpasse. Malgr sa simplicit, ses performances, elle a ses dfauts : Peu de r-utilisabilit : vous pouvez uniquement copier/coller des lments dessins en BSP, aucune optimisation ne peut tre faite partir de a... Impraticable en extrieur : aujourd'hui, l'essentiel de la partition BSP est vide, et l'optimisation base sur BSP ne fonctionne bien que dans des couloirs et pices fermes. Pourquoi d'aprs vous Half-Life, Half-Life, Unreal Tournament et bien d'autres ont-ils autant d'espaces ferms ? Difficult de dessin : BSP n'est pas un standard mais un concept : il n'y a donc pas de format de fichier standard et? du coup, il est impossible ou au mieux trs difficile de travailler la gomtrie dans un diteur externe ; Difficult de gestion des effets : si on veut que les pices bougent, se dforment, changent d'clairage, disparaissent, on comprend bien que BSP montre trs rapidement de gros problmes. La rponse, c'est le model 3D : un objet dessin avec un modeleur 3D comme Maya, Blender, Softimage, 3DSMax, puis import dans le niveau.
www.siteduzero.com
31/235
La rflexion initiale
Outre rflchir au thme, c'est aussi le moment de raliser des recherches pour trouver l'inspiration, comparer avec un endroit rel si c'est un niveau raliste, et peut-tre dcouvrir des techniques qui vous feront gagner du temps. Chaque map est aussi l'occasion d'apprendre ! Prenez votre temps, dcidez de ce que vous voulez raliser. Une source d'inspiration toute simple est tout simplement de jouer, d'essayer de nouveaux jeux, ou mme de regarder un film, lire un livre... Tout est bon pour trouver des ides !
L'bauche
Dessiner une bauche de votre map sur papier est l'occasion de vous forcer vous poser les questions qui fchent : comment remplir une zone prcise ? Quel type de dcoration ? Quels blocs seront rutilisables ? Qu'est-ce qui peut vous prendre du temps ? L'bauche, c'est une tape assez dlicate pour ceux qui n'aiment pas le dessin. Mais sachez qu'une bauche en soi n'est pas ncessairement trs dtaille. Cette tape est une aide, un moyen de vrifier que les grandes ides que vous avez certainement cette tape sont applicables, ralisables, que vous savez quel type de dcor vous allez crer, quelle ambiance vous recherchez...
Le prototypage
www.siteduzero.com
32/235
La dernire tape est aussi la premire tape de la ralisation : raliser un prototype de gameplay de la map sans se proccuper de l'environnement. Une map basique, cubique, sans textures suffit du moment qu'elle respecte le gameplay ! Testez-la avec des bots, avec des amis, trouvez les problmes et vous viterez de les corriger plus tard dans une map finie que vous devrez en partie refaire. Si vous ne deviez retenir qu'une chose de cette partie, retenez que pour des niveaux russis - et fortiori, un jeu vido russi - il faut prendre le temps de la rflexion et de l'tude. Ce n'est pas du temps perdu.
Crer une map : objectifs, dplacements, gameplay Le gameplay et la structure de votre map
Il est important de souligner qu'une excellente map pour un jeu vido donn peut devenir une trs mauvaise map pour un jeu pourtant proche. Prenons un exemple : la srie Unreal Tournament propose traditionnellement des niveaux trs connects, avec normment de chemins de navigation. Ces niveaux sont agrables jouer seulement dans un jeu o la libert de mouvement et la vitesse de dplacement sont essentielles. En revanche, ces mmes niveaux seraient trs mauvais dans une map "Capture d'otages" de Counter-Strike puisque ce gameplay rside avant tout dans la dfense (et bien sr l'attaque) d'une position fortifie. Une map compltement ouverte serait extrmement difficile jouer: les joueurs se dispersent et se perdent. Ce qui est prcisment l'objectif d'une map de type Deathmatch dans Unreal Tournament est un norme problme dans un autre jeu ! La rgle essentielle est donc de bien rflchir la structure, et la faon dont celle-ci va influencer le gameplay. On va voir quelques lments classiques du gameplay d'une map. V ous devez bien rflchir au plan de votre map, aux chemins, la faon dont les joueurs vont pouvoir mettre en place (ou pas) une stratgie.
Le Z-Axis
Une ide de plus en plus oublie dans les jeux vidos grand public est la mise en place du z-Axis ou mouvement vertical. C'est un excellent moyen de rendre votre map intressante: ajouter des chemins sur diffrents tages, permettre de prendre l'ennemi par le dessus, l o il ne regarde pas, sont autant d'ides qui donnent de l'intrt. Il ne faut pas oublier qu'un joueur a un champ de vision limit, et que naturellement, nous sommes habitus regarder autour de nous, notre hauteur. De plus, en tirant vers le bas, plac sur une hauteur, vous avez un avantage naturel: vous tes moins expos et vous pouvez trs facilement vous mettre couvert. Un mcanisme courant est donc de profiter de cet avantage pour faire de l'altitude du joueur un objectif naturel. V ous pouvez soit l'encourager en plaant des armes ou des objets en hauteur, soit au contraire compenser l'avantage naturel du joueur en hauteur en forant les joueurs se dplacer vers le bas: lment dangereux en hauteur ou objets ramasser dans les couches basses.
Un parfait exemple de z-Axis dans ce niveau d'Unreal Tournament : le passage suprieur en bas gauche de l'image donne un moyen de traverser le niveau en scurit, tandis que les niveaux infrieurs offrent plus de passage, mais avec plus de danger.
33/235
Placer des armes et munitions dans une map est un mcanisme trs classique, mme si pas universel. Les objets ramasser qui rapparaissent aprs un certain temps poussent le joueur rester en mouvement, ce qui habituellement donne de l'intrt au niveau en poussant les joueurs se rencontrer frquemment. Ainsi, dans un affrontement par quipe, placer une arme surpuissante au centre du niveau exacerbe les combats pour cette position qui donne un net avantage l'quipe qui la contrle.
Dans cet exemple, une arme est place en plein milieu d'une intersection pour encourager les joueurs s'y retrouver
Graphisme et environnement
Cette partie n'a absolument pas pour prtention d'tre un cours de graphisme, un tuto entier ne serait pas suffisant. En revanche, il est bon d'attirer l'attention sur quelques points essentiels.
www.siteduzero.com
34/235
compltement diffrents, sans rapports entre eux, dans une mme map. Exemple : une caisse en bois dans un vaisseau spatial futuriste. Un camion de pompiers dans un chteau. Un yacht ultramoderne dans un port industriel. Un nain de jardin sur le bureau du mchant. Ces exemples sont volontairement ridicules mais typiques de ce qu'on voit souvent dans les maps de dbutants. Ne riez pas trop fort, donc. La cohrence est un point crucial et va plus loin que les erreurs videntes. Il est galement important de voir de subtiles diffrences de styles. Par exemple, voici une grosse faute de got :
A ne pas faire ! V ous devriez voir, si vous faites attention, que le sol est un style trs dtaill et sculpt, l'apparence organique, tandis que les murs sont de btes murs en bton qui n'ont rien voir. a va mme plus loin: dans UT3, ces deux styles sont parfois utiliss chacun dans une base, en match par quipe, pour diffrencier les bases... En clair, il ne faut surtout pas les associer. Faire une map cohrente n'est pas forcment simple. Tchez d'y faire attention: ce sont les dtails de ce genre qui dtruisent une ambiance.
L'clairage
L'clairage est un des points forts d'UDK : il est extrmement performant, les rendus peuvent tre vraiment magnifiques. V oici quelques points trs importants surveiller, car ils peuvent trs facilement rendre votre niveau dsagrable, mme si tout le reste est parfait ! Ne pas utiliser une lumire blanche
Jamais a ! Une lumire blanche est, dans la grande majorit des cas, trs peu raliste. La lumire d'clairage dans un btiment humain tire souvent soit sur le bleu, soit sur le jaune. Suivant l'ambiance, vous de choisir une couleur - tout, sauf le blanc pur. Ne pas utiliser une lumire trs sature
Ne pas utiliser une couleur primaire dans un niveau, sauf exception. Les couleurs primaires sont trs voyantes et attirent l'oeil, il faut donc rserver leur usage des cas trs particuliers. Par exemple, un clairage rouge sur 5% de l'cran suffit rendre cette partie trs voyante : le rouge est une couleur violente qui a normment de puissance mme avec peu d'intensit. Idalement, vous devriez utiliser des lumires colores, mais pas trop : tout est question de compromis. Inspirez-vous de scnes relles pour vous dcider sur un clairage. Ne pas clairer uniformment votre niveau
Un autre dfaut courant consiste mettre des lumires partout pour que le niveau soit visible, mais sans aucune nuance, sans ombres, sans dtail donc.
www.siteduzero.com
35/235
Un petit ajout sur la cohrence: une lumire peut trs facilement dtruire celle-ci! Dans un niveau sombre, sinistre, une seule lumire mal choisie peut faire d'une uvre d'art un vrai dsastre: par exemple, une lumire bleue autour d'un lac de lave...
www.siteduzero.com
36/235
L'clairage
L'clairage est une notion vaste. V ous allez ici dcouvrir les bases de ce concept et les principaux mcanismes que propose UDK dans le domaine.
Deux clairages diffrents pour une seule scne Pour introduire cette partie, il faut d'abord prsenter le fonctionnement des lumires dans UDK. Avant tout il faut savoir que l'clairage est un effet trs gourmand en 3D. Dans un moteur de rendu classique pour des images fixes, une image 3D peut mettre des heures tre calcule, parce que des simulations complexes, proches du modle physique de la lumire, sont ralises ! Dans le jeu vido, la donne est diffrente : chaque image doit tre affiche en quelques millimes de seconde. L'clairage est donc l'un des sujets sur lesquels les moteurs de rendu s'affrontent quand on en arrive aux performances, et on trouve dans ce domaine un grand nombre d'optimisations diverses.
L'clairage statique
Le plus classique de tous, l'clairage statique, constitue gnralement l'essentiel des clairages de jeux vidos. Des moteurs comme Source y font appel quasi exclusivement. Le principe est simple et s'apparente aux moteurs de rendu classiques : au moment de prparer la map tre joue, il faut compiler l'clairage ( Build, dans le langage Unreal), en quelque sorte calculer l'effet des sources de lumire sur chaque objet. Il y a deux faons de grer le rsultat : ce qu'on appelle une Lightmap, c'est--dire une liste de toutes les faces de votre niveau qui stocke l'intensit et la couleur de la lumire pour chacune d'elles, ou bien la technique du Vertex Lighting qui stocke l'clairage pour chaque point, et ralise des calculs partir de ces points pour dessiner l'clairage des faces qui les relient. UDK utilisait le lightmapping pour le BSP, mais est pass au vertex lighting avec les models, c'est donc cette technique que vous verrez en action. Le principal avantage de cette technique est qu'elle est trs performante la fois en temps de calcul, et en mmoire. Il y a deux inconvnients : le temps de calcul de l'clairage, qui est extrmement long sur le moteur Source (prs d'une heure parfois !), et bien videmment, l'impossibilit de modifier l'clairage en jeu !
L'clairage dynamique
L'clairage dynamique s'appuie sur les mmes principes... Mais cette fois, tout est calcul en direct ! La consommation en ressources est donc terriblement plus leve et l'clairage dynamique doit se limiter aux cas o c'est utile : ciel dynamique, objets mouvants, effets spciaux... Aujourd'hui, la puissance des machines permet d'utiliser normment d'clairage dynamique, mais n'oubliez jamais que les ressources ncessaires sont bien suprieures.
www.siteduzero.com
37/235
Les ombres
Les ombres sont dpendantes de l'clairage : elles sont donc calcules soit statiquement, soit dynamiquement, de la mme faon que l'effet des lumires.
Et dans UDK ?
Pour chaque source de lumire, pour chaque objet, vous pouvez dsactiver chacun de ces modes d'clairage, dsactiver les ombres, ou modifier le comportement vis--vis de la lumire. V ous trouverez toutes ces options dans la section Lighting de chaque objet.
Shadow Falloff Exponent : mme chose, mais pour les ombres ; Cast Shadows : active les ombres pour cette lumire ; Cast Dynamic Shadows : active les ombres pour les objets qui bougent. Nous reviendrons plus tard sur la section Lightmass . Pour information, dans tous les menus de proprits , il suffit de poser le pointeur de la souris sur le nom d'un paramtre dans la colonne de gauche, pour obtenir une description. Il faut absolument que vous les lisiez pour gagner un temps prcieux ! V ous pouvez dj modifier les rglages de lumire pour l'entit prsente dans la map, et observer les variations sur le rendu. A vous de crer votre propre ambiance ! Ces rglages existent pour toutes les lumires et auront un effet semblable. UDK met jour dynamiquement l'effet des lumires dans la vue 3D, cependant vous devrez reconstruire la map pour jouer avec l'clairage rel et jour.
www.siteduzero.com
38/235
Pour ajouter une de ces lumires avances, il suffit de la slectionner, de quitter le Content Browser et de faire un clic droit pour choisir Add ...Light here, suivant le type de lumire que vous avez choisi. Remarquez que c'est la mme procdure que pour ajouter un Static Mesh: ce n'est pas un hasard ! Cela se passera toujours comme a. On va faire une liste des clairages les plus utiles : SkyLight : sert mettre en place un clairage naturel par le soleil ; SpotLight : c'est une lumire extrmement intressante car elle reprsente le comportement naturel d'une lumire relle.
www.siteduzero.com
39/235
V ous pouvez rgler deux options utiles dans la section SpotLight Componentdes paramtres: Inner Cone Angle : angle du cne autour de l'axe de la lumire dans lequel la luminosit vaut Brightness ; Outer Cone Angle : angle du cne en dehors duquel la luminosit est nulle. Entre ces deux cnes, la luminosit dcrot progressivement. Une entit SpotLight doit tre oriente, avec les outils de rotation (accessibles via ESPACE !) une fois la lumire slectionne. ...LightToggleable : ces lumires peuvent tre actives et dsactives, nous verrons comment plus tard. ...LightMoveable : ces lumires sont dynamiques, vous pouvez les dplacer dans un niveau, ce qui sera galement vu dans la suite
Lumire de type SpotLight, avec 10 comme angle de cne interne, et 50 pour le cne externe. Les deux cnes sont bien visibles dans l'diteur.
Plus d'informations
Comme toujours, la source d'informations idale est Unreal Developper Network: http://udn.epicgames.com/Three/LightingArtistHome.html N'hsitez pas visiter cette page, mme si elle est en anglais.
L'Ambiant Occlusion
L'article Wikipedia explique merveille cette technique de rendu: http://en.wikipedia.org/wiki/Ambient_occlusion En rsum, elle permet de simuler le comportement physique de la lumire, qui a tendance rebondir plusieurs fois sur des murs avant d'arriver notre il. Ainsi, un mur blanc au dessus d'un tapis rouge vif sera lgrement clair en rouge si le soleil tape fort dessus! Ce comportement a galement une tendance naturelle assombrir les coins et illuminer plus fortement les grandes surfaces sans obstacles.
www.siteduzero.com
40/235
Si par hasard vous ne souhaitez pas utiliser Lightmass, il vous suffit de dcocher Global Illumination. C'est notamment une trs bonne ide dans la phase d'bauche de la map puisque vous n'aurez besoin d'aucun clairage pour tester le gameplay, autant raccourcir les temps de reconstruction !
Les rglages utiles ici sont les suivants : Environment Color : qui rgle la teinte de l'clairage global ; Environment Intensity : qui permet de modifier son intensit ; Occlusion Exponent : plus il est lev, plus les ombres gnres par Lightmass seront tranches.
Effets avancs
Lightmass va bien plus loin qu'une simple AO. V ous pouvez galement configurer les objets qui mettent de la lumire pour qu'ils
www.siteduzero.com
41/235
participent l'clairage. C'est peut-tre surprenant, mais avant UDK et Lightmass, une torche par exemple avait une apparence lumineuse mais ne participait absolument pas au calcul de l'clairage ! Pour activer cet effet, ajoutez un objet lumineux. Dans le Content Browser, slectionnez le package UDKGame/Content/UT3, et choisissez S_Bio_Blob_01. Ensuite, placez-le en tant que Static Mesh, slectionnez-le, et appuyez sur F4 pour obtenir ses proprits. V ous pouvez modifier la taille du Static Mesh dans les proprits avec Display - Draw Scale
Pour activer l'clairage automatique, cochez la case Lightmass - Use Emissive For Static Lighting.
Il vous suffit ensuite de rgler les diffrents paramtres utiles : Emissive Boost : augmente l'effet lumineux pour l'clairage, de 0 (rien) jusqu' 1, voire plus si vous voulez augmenter la luminosit ; Emissive Light Falloff Exponent : oh, a devrait vous rappeler quelque chose a... C'est en effet le rglage de la distance d'affaiblissement de la lumire, comme sur un clairage classique. Et maintenant, supprimez toutes les lumires, reconstruisez la map et admirez le rsultat !
www.siteduzero.com
42/235
www.siteduzero.com
43/235
Unreal Kismet
Assez jou sur votre premier essai, vous allez raliser une map plus intressante. Au programme : du dynamique, des vnements, des actions ! Cette partie porte sur Kismet, un outil performant pour rendre vos maps dynamiques: faire bouger des objets, dclencher des effets, scripter des squences... Et nous allons en profiter pour tester un clairage dynamique !
Je vous encourage, mme pour ce cours, modifier la couleur de l'clairage pour la mettre en accord avec l'ambiance. C'est une habitude prendre ! Si vous avez choisi une ambiance chaude de midi, une lumire jaune/orange est toute indique. Assurez-vous cependant de rendre cette lumire facilement visible, il ne s'agit pas de la rendre inexistante non plus...
www.siteduzero.com
44/235
Enfin, je vous propose de ddoubler le Static Mesh cubique au milieu de la map pour en disposer quelques-uns autour de cette lumire. Pour les tourdis, encore une fois : cliquez sur le cube, maintenez ALT enfonce, cliquez et maintenez une des flches. Relchezla o vous souhaitez poser le cube.
www.siteduzero.com
45/235
La partie du haut est la fentre principale, celle dans laquelle vous allez dessiner de jolies squences. En bas droite : c'est la liste des squences, relativement accessoire. En bas gauche : vous y trouvez les proprits des lments slectionns, pas souvent utiles non plus mais il faut le savoir. Il n'y a rien dedans, c'est normal. Fermez la fentre, je vais vous montrer comment ajouter des lments. Slectionnez votre lumire PointLightToggleable (pas celle qui est par dfaut dans la map, qui est une DominantDirectionnalLight), et retournez dans Kismet. Cliquez droit, vous devriez avoir une option New Object Var Using PointLightToggleable_0. Allez-y, cliquez et vous avez maintenant une rfrence Kismet votre lumire !
www.siteduzero.com
46/235
Une explication s'impose ! Tous ces petits carrs colors sont des entres et sorties. On va les dtailler. Les connexions noires sont ddies aux Evnements , ou <grad>Events</gras> en anglais. A gauche, les entres, droite les sorties ! Turn On : si un vnement entre sur cette connexion, l'objet associ va s'allumer. Nous allons voir comment associer Toggle notre lumire ! Turn Off : je ne vous fais pas l'insulte de vous l'expliquer... Toggle : si un vnement entre ici, il va changer l'tat de l'objet associ ; Out : chaque fois qu'un vnement entre dans une action, il l'active, mais cette action met son tour un vnement sur la sortie Out. C'est trs utile pour propager un signal, ce que nous verrons, l encore, un peu plus tard. Les connexions de couleur vont elles tre associes des objets , comme des variables, ou notre lumire. Pour associer la lumire notre action Toggle, il vous suffit de cliquer et maintenir le bouton enfonc, sur la connexion rose marque Target, et de relcher le bouton de la souris sur votre objet PointLightToggleable_0 . Si vous souhaitez (et c'est probable) dplacer des objets, maintenez la touche CTRL enfonce, et cliquez sur un objet. Tant que vous maintenez enfonc le bouton de la souris, vous pouvez dplacer l'objet, les signaux suivront. Essayez ds maintenant. Pour vous dplacer dans la vue, maintenez le clic droit enfonc et bougez la souris. Pour dconnecter des fils, utilisez >clic droit - Break Link to sur une connexion.
www.siteduzero.com
47/235
Ce que nous avons fait est simple: nous avons associ notre lumire une action Toggle. Il faut maintenant gnrer des vnements pour les manipuler.
www.siteduzero.com
48/235
Les Event sont rouges et de forme hexagonale. Comme vous le voyez, ils disposent de plusieurs sorties : Level Loaded : vnement envoy ds que le niveau est visible, quand les joueurs viennent de lancer la map ; Beginning Level : vnement envoy quand les joueurs commencent jouer ; Level Reset : utilis quand une partie se droule en plusieurs manches, cet vnement signale une remise zro du niveau. Pour l'instant, cet vnement ne nous sert rien... Il nous faut grer le temps pour faire clignoter la lampe! Pour ce faire, nous allons ajouter une action Delay . Cette action se trouve dans New Action - Misc - Delay.
www.siteduzero.com
49/235
Tout ce qui nous intresse ici, c'est : Start : dclenche le Delay (entre) ; Finished : envoy la fin du Delay (sortie) ; Duration : temps du compteur, par dfaut 1 seconde. Il ne vous reste qu' cbler tout a ! Rappelez-vous du principe de cblage: maintenez un clic sur une connexion, et relchez sur la connexion laquelle vous voulez vous connecter. V oici les connexions que nous voulons faire : Loaded and Visible vers Start : lancer le Delay au dmarrage du niveau ; Finished vers Toggle : la fin du Delay de 1 seconde, changer l'tat de la lumire ; Finished vers Start : oui, on peut, et on va le faire. C'est une boucle infinie, mais c'est tout fait normal dans Kismet.
www.siteduzero.com
50/235
A moi aussi. C'est pour a qu'il faut viter de mettre ce genre de choses dans une map : le clignotement est trop rapide et c'est dsagrable. Je vous conseille de mettre cette valeur de Delay entre 1 et 2s pour avoir un effet agrable, comme un sapin de Nol!
www.siteduzero.com
51/235
Par exemple, pour crer une zone sans gravit, on peut crer un volume. C'est ce que nous allons commencer par faire, parce que c'est drle. Les volumes se crent exactement comme la gomtrie BSP: faites apparatre le Builder Brush avec la touche B, rglez ses dimensions comme il vous plaira (utilisez ESPACE, ou rglez les proprits prcisment comme on l'a vu avec la gomtrie basique). Simplement, au lieu d'utiliser la fonction CSG Add, nous allons crer un volume la place. Pour crer un volume, observez l'onglet Volumes des outils de map dans le menu principal. V ous avez deux boutons, cliquez droit sur le bouton de droite qui montre un cube. Une liste de tous les types de volumes que vous pouvez ajouter va apparatre, choisissez un GravityVolume. Slectionnez-le et ouvrez ses proprits avec F4.
_______
Voil quoi devrait ressembler votre cran ! Le menu Volumes dans la barre d'outils vous permet de choisir le type d'effet. Il vous suffit dans GravityZde choisir une valeur positive, 100 par exemple. Si vous quittez le sol en sautant dans ce volume, vous allez vous envoler. Comme vous le voyez, un volume est invisible, se cre avec le Builder Brush, et modifie le comportement du jeu dans son enceinte. C'est vraiment tout ce qu'il y a retenir !
www.siteduzero.com
52/235
V ous pouvez maintenant supprimer l'Event prcdent (Clic gauche, puis SUPPR), Level Loaded, et relier la sortie Touched de votre nouvel Event l'entre Start de l'action Delay .
www.siteduzero.com
53/235
V ous pouvez sauvegarder et lancer le niveau ! Maintenant, si vous entrez dans le volume, vous allez dclencher le clignotement, mais pas avant !
Sources
Cette partie tait inspire d'une page d'UDN, KismetTutorial : http://udn.epicgames.com/Three/KismetTutorial.html
Conclusion
C'tait une partie difficile, car les mcanismes sont probablement nouveaux pour vous. Ne vous inquitez pas, aprs un peu de pratique Kismet devient un outil fantastique. Kismet est un outil trs particulier, mais extrmement puissant. Une fois habitu, des squences comme celles-ci s'crivent en quelques secondes, et surtout vous allez vite avoir le rflex de fouiller dans la liste des actions et vnements de Kismet. Je vous encourage regarder les objets disponibles. Je ne vais pas tous les prsenter ! Comme toujours, il existe une documentation complte de l'ensemble des fonctionnalits. Certes, peu lisible et complexe, mais complte ! V ous pouvez la trouver, une fois encore, sur UDN: http://udn.epicgames.com/Three/KismetUserGuide.html
www.siteduzero.com
54/235
www.siteduzero.com
55/235
Unreal Matinee
Dans cette premire partie, nous allons dcouvrir comment faire bouger des lments de dcor avec Matinee !
Placer un Mover
Ouvrez votre Content Browser et cochez le filtre Static Mesh. Naviguez dans les packages dans UDKGame/Content/UT3/Environment/, et choisissez un model utiliser comme ascenseur. J'ai choisi une plaque mtallique dans le package LT_Bridge: S_LT_Bridge_SM_Bridgepanel01e. Faites attention bien charger le package qui contient l'objet que vous voulez utiliser (cliquez droit sur le package Fully Load), puis slectionnez l'objet dans le Content Browser. Revenez dans la vue 3D et faites un clic droit. V ous retrouvez l'option pour ajouter un Static Mesh, mais ne l'utilisez pas. Cette fois, cliquez sur Add InterpActor : <nom de l'objet>, par exemple Add InterpActor: S_LT_Bridge_SM_Bridgepanel01e. Positionnez l'InterpActor comme vous le souhaitez, contre un des Static Meshes.
Un InterpActor est un lment particulier dans UDK: il est constitu d'un Static Mesh, mais peut se dplacer.
Une dernire tape sur l'InterpActor lui-mme: activer ses collisions ! Slectionnez-le, ouvrez ses proprits et naviguez jusqu' la section Collision - Collision Component - CollisionType. Choisissez l'option BlockAll. La collision dsigne le comportement de l'objet: solide ou non. BLockAll rend l'objet solide, comme un StaticMesh normal. Enfin, slectionnez votre InterpActor et ouvrez Kismet. Dans les options du clic droit, choisir l'option New Event Using InterpActor_0 - Mover. Deux objets vont apparatre: un Event classique, et surtout un objet orange qui est en fait une squence Matinee. C'est exactement comme une action: un ou plusieurs objets associs, des vnements d'entre, des vnements de sortie. Doublecliquez dessus pour ouvrir Matinee.
www.siteduzero.com
56/235
Assurez-vous que l'InterpActor est slectionn dans la fentre principale avant de lancer Matinee !
Matinee
V ous devriez avoir maintenant une nouvelle fentre, que vous pouvez ne pas agrandir si vous voulez voir Kismet en arrire-plan.
Dans la fentre Matinee, vous pouvez observer 3 diffrentes zones, de haut en bas : L'diteur de courbes: si vous faites de l'animation 3D, c'est un mcanisme que vous connaissez probablement. On ne s'en servira pas dans ce cours ; La timeline : cest l'objet central, le composant essentiel de Matinee. En voici les principaux lments : Les filtres en haut (All, Cameras, Skeletal Meshes...) qui servent n'afficher que certains lments ; A gauche, la liste des Tracks et des Groups que nous allons dtailler ; A droite, un graphique dpendant du temps: eh oui, nous allons faire des squences ! Chaque Track aura sa propre ligne. En bas : c'est ici que vous rglerez le temps avec la souris ! Tout en bas, enfin, les proprits de la slection.
Dans Matinee, vous devriez avoir maintenant une ligne horizontale marque "Ascenseur". Cliquez sur cette ligne !
www.siteduzero.com
57/235
Et voil, vous tes prt animer votre ascenseur avec une Track .
www.siteduzero.com
58/235
Il faut bien comprendre que vous tes en train de dcrire le comportement d'une Action de Kismet, que vous pourrez dclencher avec des vnements !
Et maintenant, nous allons crer une Track ! Dans Matinee, slectionnez Ascenseur si ce n'est dj fait. Dplacez la barre noire de la timeline sur 0 si ce n'est dj fait. Faites un clic droit sur Ascenseur et choisissez l'option Add New Movement Track.
www.siteduzero.com
59/235
Attention ce que vous faites maintenant. V ous avez dsormais, dans le Group Ascenseur, une Track Movement, qui est slectionne. Nous allons ajouter le point de dpart et le point d'arrive de votre ascenseur ! Appuyez sur ENTREE : ceci va crer le point de dpart ou Key 0 , au temps 0s, la position initiale de votre ascenseur. Un message rouge apparat dans la vue 3D : ADJUST KEY 0 . Ignorez-le, votre ascenseur est dj dans sa position de dpart. Dplacez la barre noire l'extrme droite de la timeline, 1s donc. Appuyez sur ENTREE : ceci cre une nouvelle Key, Key 1 qui ici sera aussi la dernire. Un message rouge apparat dans la vue 3D : ADJUST KEY 1 . C'est le moment de dplacer votre ascenseur vers le haut l'aide de la vue 3D ! Pendant que vous dplacez l'ascenseur dans la vue 3D, une ligne jaune apparat dans les autres vues: c'est la fameuse Movement Track ! V ous pouvez maintenant dplacer le curseur noir de la timeline ! V otre ascenseur devrait bouger en mme temps dans la vue 3D.
www.siteduzero.com
60/235
Flicitations! Vous avez russi animer un ascenseur ! C'est fini, vous devez reconstruire la map, sauvegarder et vous pouvez tester votre nouvel ascenseur!
www.siteduzero.com
61/235
www.siteduzero.com
62/235
A partir de maintenant, toutes vos squences Kismet seront dans des botes.
Les conditions
V ous pouvez raliser des squences complexes avec les conditions dans Kismet. Clic droit - New Condition vous donnera leur liste. Ci-dessous, un exemple utilisant une condition sur le systme d'exploitation, ainsi que l'action Log (dont les textes sont exposs ).
www.siteduzero.com
63/235
www.siteduzero.com
64/235
Les proprits d'un AmbientSound Comme vous le voyez, AmbientSound est trs peu configurable. C'est l'Actor le plus basique pour grer du son. Il est temps de vous montrer comment accder au Content Browser depuis les proprits d'un objet, par exemple pour changer le contenu d'un Actor !
www.siteduzero.com
65/235
Pour vous faciliter la vie, il est possible d'utiliser les boutons en fin de ligne : L'icne en forme de loupe ouvre le Content Browser, dans lequel vous pouvez slectionner un objet du type spcifi en dbut de ligne : ici, un Sound Cue. Il est possible qu'appuyer sur ce bouton n'ait aucun effet, c'est agaant ; auquel cas vous devez l'ouvrir depuis la fentre principale et jouer des diffrentes fentres d'UDK jusqu' avoir le Content Browser et la fentre de proprits cte cte. L'icne en forme de flche verte crit l'adresse du contenu slectionn dans le Content Browser dans la proprit. Si ce bouton n'a aucun effet, vous avez choisi un objet du mauvais type. Le carr gris efface la proprit. Celui-ci fonctionnera toujours.
Ce mcanisme d'appel de contenu est extrmement important : il est utilis en permanence dans UDK ! V ous devez absolument le matriser. C'est aussi un systme un peu compliqu et qui devient trs agaant si vous n'avez pas une version rcente de Windows pour faciliter la gestion des fentres. Dans l'absolu, le plus simple est de connatre le nom des objets que vous utilisez et de les taper la main.
www.siteduzero.com
66/235
La liste des Actors lis au son dans UDK V oici la liste des sons disponibles : AmbientSoundSimple: un son d'ambiance classique, dont vous pouvez rgler les caractristiques bien plus prcisment qu'un AmbientSound : notamment, le radius ou porte du bruit, la distance laquelle le son s'entend. C'est le son que je vous conseille d'utiliser ! Attention, il ne fonctionne pas avec les SoundCue ! AmbientSoundNonLoop : un son d'ambiance spcifique qui n'est pas lu en boucle. Utile uniquement sur dclencheur, via Kismet. AmbientSoundToggleable : trs pratique, c'est un son lu en boucle que vous pouvez activer et dsactiver via Kismet AmbientSoundMovable : plus subtil et rarement utile, c'est un son dplaable. V ous n'allez vous en servir que dans certaines circonstances, par exemple pour une grosse pice ou un vhicule non pilotable dans votre map
www.siteduzero.com
67/235
L'intrt rside quasi uniquement dans deux proprits... Mais qui sont extrmement utiles ! Elles se trouvent dans la section Ambient - Attenuation des proprits : Min Radius : le rayon autour de l'Actor dans lequel le son est audible 100% de volume ; Max Radius : le rayon en dehors duquel on n'entend plus le son. V ous devez absolument utiliser un AmbientSoundSimple pour cette raison : rgler la distance d'audition du son est extrmement important. Certains sons se propagent mal (petits bruits crs par des objets de petite taille), certains doivent s'entendre de loin (machine dangereuse, ou juste trs imposante, lment de gameplay...)
www.siteduzero.com
68/235
www.siteduzero.com
69/235
Unreal Cascade Chaque feuille de ce systme est une particule. Elle a un mouvement vers le bas, une rotation et elle disparat en bas. V ous voyez, c'est trs simple! Nous ne dtaillerons pas cet outil, pas plus que l'outil d'dition des Static Meshes dans la premire partie. Pour l'instant, ce n'est pas l'objectif : vous allez juste utiliser un ParticleSystem. Fermez Cascade, slectionnez P_FX_VehicleDeathExplosion et fermez le Content Browser. Dans la vue 3D, il est maintenant trs simple d'ajouter un ParticleSystem, avec : clic droit Add Emitter : P_FX_VehicleDeathExplosion. Pour l'instant, si vous lancez le jeu, vous verrez une seule petite explosion qui s'arrte... C'est normal, ce systme de particules est usage unique !
www.siteduzero.com
70/235
www.siteduzero.com
71/235
A ce stade, votre mine devrait se dclencher votre passage et lancer l'effet d'explosion ainsi que le son !
C'est normal. Slectionnez votre Event Touched, et modifiez sa proprit Max Trigger Count pour la placer 0. L'explosion se dclenche ds le dbut!
Dsactivez la case AutoActivate des proprits du ParticleSystem, dans F4 - Emitter Particle System Component - Particle System Component.
www.siteduzero.com
72/235
En conclusion
V ous avez maintenant probablement remarqu que la philosophie d'UDK n'est pas de vous proposer des Actors avancs, prts l'emploi, qui ralisent une tche complexe. Au contraire, UDK vous propose des mcanismes trs simples et puissants: charge vous de les associer comme nous venons de le faire pour en faire des effets dignes des meilleurs jeux vido ! Kismet est parfait pour combiner les forces : c'est un outil essentiel que vous devrez matriser. Une fois n'est pas coutume, ce n'est pas UDN que je vous propose pour approfondir mais UDK Central , un autre site connatre. V oici un cours qui associe Matinee un ParticleSystem : http://udkc.info/index.php?title=Tutor [...] ticle_systems
www.siteduzero.com
73/235
Crer un terrain
Tout commence trs simplement avec Tools - New Terrain.
La fentre qui va s'ouvrir L'onglet Patches exige une explication. V ous le savez peut-tre dj, mais en 3D, la courbe n'existe pas . La seule chose qui existe dans le monde de la 3D, c'est le triangle, et le carr puisque deux triangles accols peuvent en former un. Cependant, pour raliser des dcors ralistes comme des terrains, il faut pouvoir simuler des formes arrondies. En effet, le sol est
www.siteduzero.com
74/235
relativement rond et doux dans ses formes gnrales, en particulier sur un sol terreux o il est impossible d'avoir des variations brutales ! La solution est simple : il faut diviser les faces en une multitude de faces, pour pouvoir approcher la forme d'une courbe. C'est exactement ce que fait un terrain : c'est une simple face, divise en un certain nombre de faces sur chaque axe... Et voil ce que reprsentent les Patches : c'est le nombre de faces lmentaires sur chaque axe ! Ici, vous aurez donc un terrain carr constitu de 16 * 16 petits carrs ! V ous retrouverez aussi ce mcanisme sous le nom de Tessellation dans le jeu vido et mme dans l'diteur de terrain que nous allons voir maintenant. Retenez ce nom ! Cliquez sur Next, puis Finish. V ous allez probablement remarquer un effet de clignotement dsagrable sur le terrain. C'est normal: il est encore plat, et se confond donc avec le sol. Dans un jeu vido, quel qu'il soit, avoir deux faces "confondues" produira toujours cet effet qu'il faut absolument viter.
L'diteur de terrain d'UDK Quelques commentaires : En haut droite, vous avez les options du terrain. Je vous conseille de cliquer sur Toggle Wireframe ! En haut gauche, les diffrents outils d'dition permettent des actions varies : dplacer les sommets du terrain, lisser, ...
www.siteduzero.com
75/235
L'outil Paint sur la premire ligne au milieu est l'outil que vous utiliserez 99% du temps. En bas droite, on retrouve un bouton Tessellation pour varier la rsolution du terrain. Tout en bas, la liste des "couches" d'effets, par exemple pour activer et dsactiver des effets avec la petite case de gauche qui verrouille un layer si vous y cliquez. Et au milieu, les outils principaux: changer la taille du pointeur, changer ses effets, son influence... Rien de mieux qu'un essai pour comprendre !
La rgle du jeu est extrmement simple: CTRL + clic gauche maintenu pour monter, CTRL + clic droit maintenu pour descendre.
Pour ajouter des couleurs votre Terrain, vous devez slectionner un Material dans le Content Browser. On reparlera des Material plus tard. Puis, fermez le Content Browser et dans la liste en bas, clic droit et choisissez New Terrain Setup Layer from material (auto-create).
Un terrain avec un Material ! V ous aurez l'occasion d'exprimenter les terrains en dtail sur des maps complexes en extrieur. C'est un outil trs agrable utiliser, mais rserv certains usages prcis. Cette partie tait un peu dcousue. L'objectif tait de bien ancrer dans votre esprit les mcanismes essentiels d'UDK : Utiliser des Actors , en les choisissant dans l'Actor Browser, et modifier leurs proprits ; Utiliser du contenu du Content Browser et l'associer aux Actors ; Lier tous ces lments avec Kismet pour raliser des effets intressants. Il n'y a pas grand-chose de plus comprendre dans le mapping avec UDK. Une fois ces principes matriss, vous ne ferez que dcouvrir de nouveaux Actors, crer de nouveaux contenus. C'est aussi la force d'un moteur prouv et bien construit : une fois que vous avez compris le principe, vous pouvez tout apprendre.
www.siteduzero.com
76/235
www.siteduzero.com
77/235
PathNodes particuliers
Il existe un nombre considrable de points de navigation. Le PathNode est le plus simple d'entre eux puisqu'il n'a aucune fonction particulire, cependant tout point d'intrt de votre map sera un point de navigation lui aussi ! Le plus important d'entre eux est le point de dpart d'un joueur, ou PlayerStart dans UDK. V ous pouvez ouvrir l'Actor Browser, dj utilis pour l'clairage, partir du Content Browser et dvelopper la catgorie Common. V ous y retrouverez l'entit PlayerStart, ainsi que TeamPlayerStart et UTTeamPlayerStart qui en sont des versions amliores pour grer respectivement les quipes en gnral, et les quipes dans Unreal Tournament. Il vous suffit ensuite, comme l'accoutume, de slectionner l'Actor choisi, de fermer l'Actor Browser pour faire ensuite un clic droit dans la vue 3D : Add ... here. Si vous souhaitez uniquement placer des points de dpart classiques (PlayerStart), vous pouvez le faire trs rapidement avec clic droit - Add Actor - PlayerStart dans la vue 3D ! Tchez de placer un grand nombre de PlayerStart dans votre niveau, ou de (UT)TeamPlayerStart suivant celui qui vous concerne, de faon pouvoir grer un grand nombre de joueurs.
Et voici la liste de tous les autres points, telle qu'UDK la propose, libre vous d'en crer de nouveaux plus tard.
www.siteduzero.com
78/235
La liste des Navigation Points Ces points spciaux ne seront pas dtaills ici. Encore une fois ce cours n'a pas pour but d'tre une documentation complte d'UDK mais une introduction aux principes essentiels ! Si vous vous posez des questions, une recherche rapide sur Google ou UDN vous donnera probablement la rponse sur ces sujets. Ne vous inquitez pas, le PathNode est rellement le point de navigation le plus courant en dehors des armes que nous allons maintenant voir.
Documentation
V oici la page rsumant les proprits des Path Nodes sur UDN : http://udn.epicgames.com/Three/Waypoin [...] calGuide.html
www.siteduzero.com
79/235
UTWeaponPickupFactory, et les autres ! Ces entits ont des noms relativement logiques, vous allez vous en sortir. Notez qu'Unreal Tournament comporte bien plus d'armes: UDK vous propose uniquement une petite partie de ses lments pour vous enseigner le fonctionnement du moteur. V ous n'tes pas censs les utiliser dans votre jeu. Et maintenant, voyons comment rendre votre map jouable !
Unreal Frontend
www.siteduzero.com
80/235
Unreal Frontend Cet outil est capable de bien des choses, ici encore nous n'en utiliserons qu'une partie. Pour information, Unreal Frontend permet, entres autres, de "packager" votre jeu en un ensemble jouable que vos joueurs pourront tlcharger. Concrtement, Unreak Frontend rassemblera vos fichiers, vos maps, votre contenu et vos scripts en un installeur Windows ou iPhone que vous pourrez distribuer. Son interface se dcoupe en plusieurs sections : Un bandeau suprieur qui regroupe les principales actions ; Une liste latrale des Profils d'actions : ces derniers permettront de dfinir des actions que vous raliserez couramment ; Le reste de l'interface regroupe les options ; La console, tout en bas, qui vous donnera des informations.
www.siteduzero.com
81/235
Vous devriez avoir une interface comme celle-ci ! Pour l'instant, la map actuelle est DM-Deck. Cliquez sur Remove, puis sur Add et choisissez votre map dans la liste. V ous devez d'abord placer la map dans le dossier UDKGame/Content/Maps. Cliquez sur Add Selected Maps, puis sur le bouton Cook en haut, et enfin sur Cook Packages ! La console devrait s'animer... Si tout se passe bien, le log de console devrait s'achever par une ligne en vert, qui se termine par SUCCEEDED, ou Russi . V ous pouvez maintenant lancer UDK Game : votre map apparatra dans la liste des maps !
Pour votre information, les maps publies sont places dans UDKGame/CookedPC/Maps. V ous pouvez fermer Unreal Frontend: nous nous en resservirons bientt, quand vous en serez publier votre jeu vido.
Plus d'infos
On garde les bonnes habitudes : voici la documentation du processus de Cooking . http://udn.epicgames.com/Three/ContentCooking.html
bauche
C'est le moment de prendre son temps pour rflchir au gameplay, l'architecture, au thme, l'ambiance... C'est une phase trs importante qui peut vous faire gagner normment de temps par la suite. V ous risquez d'avoir moins d'ides une fois que vous serez lanc dans la ralisation, profitez de cette premire tape pour tout mettre plat.
Prototypage
Une fois que vous savez ce que vous allez faire, en quelques heures vous pouvez construire la structure d'un niveau, uniquement avec BSP. Placez-y les armes, les vhicules, les objets ramasser... Prparez votre map pour les bots, bref, occupezvous de l'ensemble du gameplay, et jouez sur votre map ! Dans cette tape, le gameplay doit tre votre seule et unique proccupation. Attention toutefois aux dimensions : tchez d'utiliser uniquement des puissances de 2 (128, 256, 512 units) pour votre grille, et respectez cette dernire !
Dcoration
www.siteduzero.com
82/235
C'est le moment de dcorer la map. Si tout a t fait en respectant la grille, cela peut aller assez vite. V ous allez pouvoir utiliser les Static Meshes que vous avez en stock, ou ceux que vous avez crs pour l'occasion, et dcorer cette map de fond en comble ! Dans cette phase, vous allez galement pouvoir dcorer votre map avec des effets spciaux et animations.
Publication
Enfin, le moment sera venu de distribuer votre niveau. Si vous tes en train de raliser un jeu complet, cette partie se fera probablement en mme temps que tout le reste du jeu ; cependant si vous tes simplement en train de raliser un niveau pour un jeu existant, vous devez publier votre map, y intgrer vos lments graphiques additionnels, raliser des captures d'cran pour en faire la promotion sur les forums, corriger les bugs remarqus par les joueurs... C'est aussi un travail de longue haleine ! a y est, vous connaissez le processus de dveloppement d'une map. V ous avez en main l'essentiel des informations, pour celles qui vous manquent, vous savez o trouver la documentation qui vous les donnera ! Cette partie s'achve ainsi. La partie suivante vous expliquera comment crer vos propres lments de maps : aussi bien vos models, que du son, de la musique ou des effets spciaux ! Maintenant, il est temps de personnaliser vos niveaux !
www.siteduzero.com
83/235
Il ne vous apprendra pas modliser, dessiner, crer du son. Pour cela, il existe d'autres cours spcialiss, y compris sur le Site du Zro. Ce chapitre vous enseignera uniquement les spcificits du jeu vido. Gardez aussi en mmoire qu'une seule personne ne peut pas tout savoir-faire. Si vous vous lancez dans un jeu, il est peu probable que la mme personne ralise le son, les maps et le contenu 3D ! Si vous en doutiez encore, cette partie va vous montrer que crer un jeu est une tche de longue haleine et qu'il est indispensable de crer une quipe. Ne vous dcouragez pas pour autant !
La modularit
On a un peu parl dans la partie prcdente de la diffrence entre la gomtrie en BSP et des models. Il est temps de revenir un peu sur ce point ! Les models 3D sont bien plus que de simples dcorations dans UDK. Ils constituent en ralit l'ensemble des dcors dans un niveau d'aujourd'hui : portes, murs, sol, et mme parfois reliefs ou terrains naturels alors que l'outil Terrain le permet ! Pourquoi ? Il y a de multiples raisons que nous avons dj voques. Mais la raison fondamentale, la voici : les models permettent de construire des dcors modulaires . C'est quoi, modulaire ?
Modulaire signifie ici : facile dplacer, dupliquer, connecter d'autres lments. En pratique, c'est surtout un ensemble de caractristiques sur les dimensions et la forme de vos objets qui vous feront gagner un temps fou dans vos niveaux. Avez-vous remarqu que les StaticMeshes disponibles dans UDK, en particulier les lments de murs ou de sol, ont des dimensions extrmement prcises ? Souvent, leurs hauteur, longueur et largeur valent exactement 512, 256, 128 ou encore 64 units. L'intrt d'adopter ces dimensions va vite vous apparatre : vous pouvez construire une pice facilement sans avoir de trous, ou de difficult placer une pice, comme leurs dimensions sont standardises elles vont toutes parfaitement ensemble ! Et comme la grille de positionnement est galement rgle pour ces valeurs, vos objets vont toujours bien se coller entre eux et s'aligner parfaitement.
www.siteduzero.com
84/235
Un exemple de design modulaire : au total il n'y a pas plus d'une dizaine de models diffrents dans les images que vous voyez ! Au niveau des dimensions, 256 et 512 sont les seules utilises pour chacun de ces meshs. Le mur a la mme longueur que le sol, que le toit, qu'un angle du sol... La plupart des modeleurs 3D disposent d'une grille : dans Blender par exemple, vous pouvez configurer cette grille pour qu'elle se divise par 8 au lieu de se diviser par 10. Je vous encourage le faire sur votre modeleur si c'est possible ! Ne crez jamais un mur, une dalle, un bloc rutilisable avec des dimensions qui ne sont pas une puissance de 2. V ous le regretterez amrement et vous devrez recommencer vos models plus tard. Une autre rgle concerne le placement de l'origine : vous devez la placer de prfrence dans un angle. Par exemple, pour un morceau de mur, placez systmatiquement l'origine au niveau du sol, et dans un angle du model. Pour pas mal de raisons : notamment la gestion du redimensionnement, et surtout l'assurance que votre model respecte la grille.
Le rapport est en effet difficile percevoir au premier regard. En effet, ce dont nous parlons ici, c'est tout simplement du copiercoller, c'est possible avec des blocs BSP, tout comme les dimensions des blocs BSP sont galement modulaires. Mais il y a une diffrence cruciale : les StaticMeshes auxquels vous tes maintenant habitus, dans votre niveau, ne sont que des rfrences vers un model 3D contenu dans un package. Il y a donc un seul objet 3D, pour potentiellement 10 voire 100 exemplaires de l'objet dans votre niveau, si par exemple c'est une dalle sur le sol ; alors que quand vous faites un copier-coller d'un bloc BSP, vous avez physiquement deux fois le mme objet dans le niveau . En consquence, mme si cette dalle est trs dtaille et finement dcore, UDK n'aura besoin de grer qu'une seule fois les donnes de cette dalle si c'est un StaticMesh, alors qu'en la ralisant en BSP, UDK devra grer dans le rendu la totalit des exemplaires . V ous pouvez donc, en rutilisant un StaticMesh plusieurs reprises, gagner normment en performances tout en offrant un norme niveau de dtail !
www.siteduzero.com
85/235
Utiliser 50 fois le mme StaticMesh sera bien sr toujours plus gourmand que de l'utiliser une seule fois. Mais pour le mme niveau de dtail, il est toujours mieux d'utiliser 50 reprises un seul StaticMesh que d'utiliser 50 StaticMeshes diffrents.
Attention ne pas trop en faire ! Si vous faites un niveau entier avec seulement 2 ou 3 models 3D, il sera trs laid et trs ennuyeux. Il y a un juste milieu !
Processus
La cration d'un model se droule souvent suivant cette procdure. Le Level Designer a besoin d'un lment dans le niveau, par exemple une dalle. Il dcide des dimensions de la pice, en respectant des valeurs modulaires. Il ralise la pice dans un modeleur 3D comme Blender, 3DS Max, XSI, ... Il faut ensuite crer un matriau pour cet objet, en l'associant l'objet par UV Mapping. La pice est ensuite exporte dans UDK via le Content Browser. C'est fini, il n'y a plus qu' l'utiliser ! Pas de panique, nous allons trs vite voir en dtail comment faire tout a.
Et raison ! V ous devez continuer modliser en vitant un maximum les triangles. Simplement, sachez qu'au passage UDK, votre model sera "triangularis" : si vous avez 1000 faces dans Blender, vous aurez donc 2000 triangles dans UDK (une face rectangulaire est faite de deux triangles). Et maintenant les chiffres, pour UT3 en 2007... V oici des ordres de grandeur du nombre de triangles par objet : Une petite pice de dcoration qui trane au sol : 100 triangles ; Un petit pan de mur dtaill : 500 triangles ;
www.siteduzero.com
86/235
Le but n'est pas de vous obliger atteindre ces chiffres ni de vous interdire de les dpasser : c'est un ordre de grandeur ! Ne faites pas une bouteille avec 1000 triangles ni un tank avec 100 triangles, c'est tout. Enfin, soyez conscients que les effets avancs que peut proposer votre modeleur 3D seront perdus l'exportation : c'est typiquement le cas des Modifiers de Blender.
Le rendu tudi en dtail ici Un matriau (Material dans UDK) comprend toutes les proprits de l'aspect physique d'un objet. On peut trouver par exemple : La couleur, souvent dfinie par une texture, on parlera de Diffuse Map ; Les reliefs, galement souvent grs par une texture, on parlera de Normal Map ; La rflectivit, de mme, on parlera de Specular Map ; L'mission de lumire, on parlera de Emissive Map ; La transparence, encore une fois une texture peut dfinir cette caractristique ; Et bien d'autres encore. Eh oui, c'est peut-tre une surprise, mais il n'y a quasiment jamais une seule texture sur un objet, mais parfois 5, ou 6 diffrentes ! Car ce qu'on applique l'objet, c'est un matriau, et les textures qui en font partie peuvent avoir un effet assez difficile percevoir. Prenons l'exemple d'un des matriaux utiliss sur les models 3D montrs ci-dessus :
www.siteduzero.com
87/235
De gauche droite : Diffuse Map, Emissive Map, Normal Map. En bas au centre : le matriau final.
Encore et toujours le mme matriau, utilis sur le bloc de sol des images prcdentes.
Specular Map
Le principe de cette texture est simple : elle dfinit l'intensit des reflets. Si vous utilisez du blanc, les reflets seront intenses, et nuls si vous utilisez du noir. Sachez que vous pouvez gnralement vous contenter d'utiliser votre Diffuse Map, en niveaux de gris, avec un contraste augment, comme Specular map. V ous pouvez galement la gnrer automatiquement dans UDK en utilisant uniquement la Diffuse Map, pour les matriaux avec des reflets limits (bois, pierre...).
www.siteduzero.com
88/235
Normal Map
Cette texture mrite une explication. En fait, elle mriterait un cours en elle-mme, mais ce n'est pas le but ici... La Normal Map est une faon de crer des reliefs autrement qu'avec des points et des faces supplmentaires. C'est la solution que vous emploierez pour donner du relief vos matriaux : par exemple, il est impensable de modliser les fibres du bois, les trous, les nuds... En revanche, partir d'une texture de bois, vous pouvez gnrer une Normal Map qui une fois dans UDK vous permettra d'avoir des reliefs.
Les outils ne manquent pas. Nous verrons une mthode complexe dans la partie suivante, mais la mthode simple est de gnrer la Normal Map partir de la Diffuse Map, avec par exemple un plugin de Photoshop, si vous l'utilisez : nDO, qui est en fait un ensemble de scripts Photoshop, assez efficace : http://cgted.com/ ; Nvidia Plugins (plus mis jour pour les versions actuelles de Photoshop) : http://developer.nvidia.com/nvidia-tex [...] obe-photoshop ; Et bien sr, il en existe galement pour GIMP. Il y a d'autres outils qui fonctionneront eux sparment de votre diteur d'images : SSBump, libre et gratuit, lger qui fonctionne trs bien, mais sans visualisation interactive avec les rglages. Je vous conseille de fouiller un peu son interface, essayer plusieurs rglages et choisir ses rglages comme rglages par dfaut. Cela vous fera gagner du temps. V ous pouvez le tlcharger ici : http://ssbump-generator.yolasite.com/ ; Crazybump, payant, mais une vraie merveille, simple et trs efficace, que nombre d'artistes 3D utilisent : http://www.crazybump.com/ ; xNormal, gratuit, bien plus difficile utiliser mais aussi assez diffrent, il s'axe vers le baking que nous verrons dans la
www.siteduzero.com
89/235
Pour terminer
Comment on se sert de tout a ?
Quand vous aurez une Diffuse Map prte pour votre objet, ouvrez-l avec un de ces outils, et utilisez-le pour gnrer une Normal Map. La faon exacte de faire dpend de l'outil et je ne l'expliquerais pas dans ce cours : il y a trop d'outils diffrents pour que a soit utile. Prenez a comme un TP ! Dans cette partie, vous ne trouverez pas un cours de 3D et encore moins de 2D. Attendez-vous ce que je vous laisse rgulirement apprendre par vous-mme sur des aspects qui ne sont pas directement lis au cours.
Modlisation
La premire tape est de modliser un model dit Low Poly , peu dtaill mais qui reprsente correctement les formes de l'objet. Notez bien la position de l'origine (visible en bas droite) : dans un coin, en bas. C'est comme a qu'il faut faire, et surtout pas au milieu de l'objet si vous voulez qu'il soit modulaire !
Model Low Poly Ensuite, on ralise une copie de cet objet basique et on le sculpte en utilisant cette fois-ci un nombre illimit de polygones :
www.siteduzero.com
90/235
parfois plusieurs millions ! On parlera de model High Poly . Aucun jeu vido ne peut encaisser un tel objet, mais ce n'est pas grave, a ne sera pas ncessaire.
Baking
Le Baking est l'opration qui permet de transfrer les dtails du model high poly vers le model low poly, tout en conservant le mme nombre de polygones ! Pour raliser le Baking , il faut d'abord raliser une UV Map de l'objet low poly.
www.siteduzero.com
91/235
UV mapping Une fois les deux models disponibles, low poly et high poly, il faut utiliser un outil comme xNormal dont nous avons parl, qui va en quelque sorte comparer les deux models, et gnrer une Normal Map utilisable sur le model low poly pour lui donner l'apparence du high poly. V ous pouvez galement utiliser votre logiciel de 3D favori du moment qu'il le permet, c'est le cas de Blender. Dans le monde de la 3D, on parlerait de Baking . Et l vous devriez comprendre tout l'intrt de la manipulation : vous pouvez raliser un objet extrmement dtaill, et ensuite le transformer en un objet trs peu coteux en ressources mais avec un niveau de dtail approchant ! Le Normal Mapping n'est pas magique : il sera toujours facile de discerner la diffrence entre low et high poly. Le rendu sera au final un intermdiaire entre les deux.
www.siteduzero.com
92/235
Le rendu final Au terme de ces manipulations, le Level Designer dispose de trois lments : Un model low poly utilisable dans UDK ; Une normal map ; Une diffuse map. C'est suffisant pour placer cet objet dans votre jeu !
www.siteduzero.com
93/235
Test dans UDK Aprs cette introduction, vous devriez avoir les ides plus claires quant la ralisation de contenu. Nous allons donc pouvoir passer aux aspects plus lis UDK.
www.siteduzero.com
94/235
Importer du contenu
Maintenant que vous savez comment crer votre contenu, voyons comment l'importer dans UDK !
Dans Mesh , je place les fichiers Blender et dans Texture les textures et leurs sources Photoshop. Stone est le nom du package, et j'ajoute le prfixe CA tous mes packages. Cette organisation vous permettra de vous y retrouver facilement. Rien ne vous empche de tout faire sur le bureau de votre PC, mais a sera aussi plus compliqu pour vous.
Importer un model
Importer votre objet dans UDK est la chose la plus simple du monde. Nous allons reprendre l'exemple prcdent et importer ce bloc de pierre. A vous de jouer : vous devez avant tout crer un objet 3D et lui associer une UV Map, ainsi qu'une texture et une normal map si vous tes motivs. Je ne vous donne pas d'exemple tout fait. SI vous voulez crer votre jeu, vous aurez un certain nombre d'objets crer, il va bien falloir commencer un jour !
Importer un mesh
Importer un Static Mesh dans UDK est trs simple, il vous suffit d'exporter votre mesh au format ASE (ASCII Scene), FBX ou T3D depuis votre diteur favori. Ensuite, lancez UDK Editor et restez dans le Content Browser.
www.siteduzero.com
95/235
Cliquez sur le bouton Import en bas gauche de l'cran pour ouvrir un navigateur Le menu d'importation est accessible via le bouton Import du Content Browser. Naviguez jusqu' votre objet et double-cliquez dessus ! Si vous ne le trouvez pas, c'est que vous n'avez pas export le fichier dans un des formats supports.
A vous de choisir le nom du package et de votre objet. L'option Groupingest trs utile. Elle vous permet de dfinir des groupes dans un package, et je vous le conseille: Mesh pour les models, Texture pour les textures, Sound, Material, etc. V ous pouvez mettre ce que vous voulez, mais organisez-vous. Une dernire chose : si vous choisissez comme nom de package un package qui n'existe pas, comme c'est probablement le cas, vous allez le crer. Enfin, cliquez sur OK pour importer le mesh. Mon Static Mesh est tout gris et bleu !
C'est normal : aucun matriau ne lui est associ, UDK n'importe ici que la gomtrie de votre objet et pas du tout ses couleurs, textures... Nous allons y remdier. Mais avant tout, sauvegardons notre travail !
www.siteduzero.com
96/235
Sauvegarder
Faisons un point sur la gestion des packages et des fichiers, avant de crer un Material pour dcorer votre objet. Sauvegarder est trs simple : il suffit de slectionner le nom du package dans l'arborescence et d'utiliser le raccourci CTRL + S pour sauvegarder et donc enregistrer le package au format UPK, comme Unreal Package. Rappelez-vous de votre organisation pour enregistrer au bon endroit !
L'tat normal du Content Browser avant sauvegarde. Notez l'toile ct du nom de votre package dans l'arborescence ! Elle indique qu'il faut sauvegarder ce fichier car il a t modifi (ou cr, ici)
Pour importer une texture, c'est exactement la mme chose, sauf que vous devriez utiliser le mot-clef texture pour le Grouping. Une nouveaut cependant : les options de compression !
www.siteduzero.com
97/235
Dans la pratique, seulement trois sont utiles : TC_Normal, par dfaut ; TC_NormalMap que vous devez utiliser pour vos normal maps ; et TC_Grayscale pour les tetxures en niveaux de gris, comme Specular ou Emissive.
Eh oui. UDK ralise des optimisations et compressions tous les niveaux de la chane : importation, sauvegarde, Cooking... Le rsultat : des taux de compression hallucinants. Pour exemple, une de mes maps pse plusieurs centaines de Mo en fichiers avant importation, et seulement 30Mo une fois termine et publie ! En revanche, a a un prix : importer une texture peut prendre une bonne minute et plus la rsolution est leve, plus c'est long. Pas de panique, UDK n'a pas plant, il ne rpond plus c'est tout. UDK a vraiment plant : "Le programme a cess de fonctionner" !
Si c'est le cas, c'est sa faon de dire qu'il n'aime pas votre texture. Assurez-vous d'avoir respect les bonnes dimensions, de ne pas avoir activ la compression RLE sur le Targa, et d'tre en mode 24 bits et tout ira bien.
Crer un Material
Cliquez sur le nom de votre package dans l'arborescence, et dans la liste du contenu (votre mesh et vos deux textures) cliquez droit et choisissez New Material. V ous devez commencer connatre cette fentre par cur. Indiquez Material dans Grouping , et un nom explicite, avec un prfixe M_ pour Material par exemple. Cliquez sur OK : l'diteur Material s'ouvre.
www.siteduzero.com
98/235
Unreal Material Editor Rassure-vous : cet outil est bien plus simple qu'il n'en a l'air. Cette zone noire gauche est la zone de prvisualisation, droite, vous avez un diteur exactement comme celui de Kismet ! Ce gros bloc avec plein de connexions, c'est le rendu final avec plusieurs canaux : Diffuse, Emissive, Specular, SpecularPower et Normal sont amplement suffisants pour l'instant. Il faut commencer simple : ajouter vos textures ! Pour ceci, la manipulation exige d'ajouter un node TextureSample. Ajoutez-le avec clic droit - Texture - New TextureSample. Ensuite, vous pouvez le dplacer comme dans Kismet, avec CTRL + clic gauche maintenu. Et maintenant, vous devez taper le nom de la texture dans les proprits en bas. Puis appuyez sur ENTREE.
Tapez le nom de la texture : UDK devrait trouver tout seul le rsultat . V ous devriez avoir la texture affiche la place du carr noir. Si c'est le cas, reliez-la sortie en haut gauche la connexion Diffuse du matriau, comme dans Kismet, et recommencez avec votre Normal Map si vous en avez une. V ous devriez avoir votre matriau complet affich gauche.
www.siteduzero.com
99/235
Un matriau basique termin. Vous pouvez le visualiser sur d'autres objets basiques avec les boutons turquoise dans la barre d'outils, qui reprsentent les formes basiques essayer. Fermez la fentre, et acceptez de sauvegarder les modifications, bien sr !
La fentre d'dition de Static Mesh Ce qui vous intresse est dans la partie droite de l'image : les options du model. En particulier, l'arborescence des diffrents lments, nomme LODInfo. LOD signifie Level of Detail. V ous pouvez dans UDK modifier dynamiquement votre model 3D l'aide des options en bas droite, pour crer des niveaux de dtail : trs dtaill, peu dtaill, forme basique... Cela vous sera utile si vous ralisez un jeu extrmement dtaill puisque vous pourrez baisser le niveau de dtail des objets trs loigns qu'on distingue peine.
Naviguons dans l'arborescence LODInfo : 0 : c'est le LOD 0, le niveau de dtail de base en quelque sorte. C'est votre model, il n'y a pas de LOD moins dtaill de toute faon. Elements : la liste des meshs qui constituent le model. L encore, il n'y en a qu'un, mais vous pouvez crer des models en
www.siteduzero.com
100/235
plusieurs parties, notamment si vous voulez leur assigner plusieurs matriaux. 0 : il n'y a qu'un seul lment ici, c'est bien lui. Il a une mention Material=None, on va changer a ! Cliquez sur la flche triangulaire gauche de la ligne pour dvelopper le menu. Apparat une ligne Material. Si vous cliquez dessus, la zone concerne sur le model va s'illuminer en violet. Entrez le nom de votre Material et appuyez sur ENTREE, ou utilisez l'icne en forme de loupe pour naviguer dans le Content Browser puis la flche verte pour slectionner le Material. C'est fini ! Rduisez l'arborescence pour enlever le halo violet sur le model.
Les collisions
Les collisions, dans le jeu vido, dsignent la capacit d'un objet ne pas tre pntrable par un autre. C'est un mcanisme qui n'est ni automatique ni vident : par dfaut, vos models imports ne disposent pas de collisions. Il faut crer une sorte de bote invisible autour de votre objet qui empche d'autres objets, eux aussi pourvus de collisions, de pntrer dans le model. Pour rsumer simplement, les collisions vous permettent de marcher sur votre objet ou de vous en servir comme mur ! Pour l'instant, votre mesh est compltement dpourvu de collisions. UDK vous le signale dans le Content browser pour vous en avertir ! La bonne nouvelle c'est qu'UDK est capable de les gnrer automatiquement. Cliquez sur View - Collision pour activer leur affichage, puis dans le menu Collision, choisissez une mthode de gnration. En voici une brve prsentation : 6DOP : un pav droit aux dimensions de l'objet ; 10DOP-_ Simplified Collision : plus fidle et adapt aux objets circulaires, par exemple pour une colonne ou un pot de fleurs, utilisez 10DOP-Z, pour un canon, 10DOP-X ou Y suivant l'axe ; 18DOP et 20DOP : un peu plus de dtail ; Sphere simplified : inutile ; Auto Convex Collision : un des plus intressants, il permet de rgler compltement les options de gnration. Attention, n'en abusez pas, c'est un dernier recours, il n'est pas trs fiable.
www.siteduzero.com
101/235
Le mesh et ses collisions avec DOP6 V ous pouvez sauvegarder. V otre mesh est prt tre plac dans le jeu ! Que faire si aucune collision automatique ne donne de rsultats corrects?
V ous avez probablement mal conu votre mesh, il est trop compliqu par exemple, ou bien c'est une pice concave, comme une vote de tunnel. Auquel cas, si vraiment vous ne pouvez pas le sparer en plusieurs blocs (ce qui est vraiment la meilleure solution), il vous reste deux choix : Crer un volume BlockingVolume dans la map autour de ce mesh ; Dsactiver la collision simplifie et passer de la collision "par polys", qui est bien plus gourmande en ressources et donc uniquement faisable avec des models peu dtaills. Pour ce faire, dans l'diteur de Static Mesh, dsactivez UseSimpleBoxCollision, UseSimpleLineCollision et UseSimpleRigidBodyCollision.
Le Lightmapping
Une fois ces bases comprises, voyons un dernier point sur ce sujet : le Lightmapping . Qu'est-ce que c'est que cette technique ?
V ous ne le savez pas encore mais dans vos niveaux UDK, pour chaque objet, une texture correspondant l'clairage de l'objet est ralise quand vous calculez l'clairage. V ous l'avez probablement compris dans les tapes prcdentes : c'est par l'UV-Mapping que les coordonnes sur la texture sont associes l'objet 3D... C'est exactement comme a que fonctionne le Lightmapping : vous allez raliser une UVMap spciale pour l'clairage, ou lightmap !
www.siteduzero.com
102/235
LightMapResolution : la rsolution de la texture utilise pour la lumire. 256 est une valeur importante, 32 ou 64 suffisent aux petits objets dont l'clairage n'est pas dtaill.
N'hsitez pas choisir une valeur faible comme 64 ou 128 pour la rsolution. V ous pouvez fouiller les options du mesh dans la map pour forcer une autre rsolution sur un exemplaire prcis dans un niveau. Cette technique est gourmande en temps de compilation !
Actuellement votre mesh a une seule UVMap, celle que vous avez ralise dans votre modeleur 3D. La mention UV Channels : 1 en haut gauche de la fentre devrait vous en convaincre. Pour gnrer une seconde UVMap, cliquez simplement sur File - Generate Unique UVs. Un nouveau menu apparat : cliquez simplement sur Apply ! Rien de spcial ne va se passer, sauf cette mention qui va apparatre... UV Channels : 2 . V ous avez russi ! Il suffit de manipuler le mesh exactement comme avant, et vous allez constater de bien meilleures ombres. J'ai un message d'erreur : GenerateUVs failed, couldn't convert to a D3DXMesh !
A l'heure d'criture de ces lignes, vous devez utiliser le rendu DirectX 9. Dans la fentre principale, cliquez sur File Switch Renderer - DX9 et recommencez.
Et a ressemble quoi ?
Dans l'exemple ci-dessous, le sol de la pice est lightmapp, en particulier sous le puits d'clairage. Si on utilise un mesh classique sans ce travail supplmentaire, l'ombre est trs diffuse et les dtails en sont absents.
www.siteduzero.com
103/235
Parce que chaque sortie R,V ,B ou Alpha est une image en niveaux de gris. Ils contiennent donc une information de couleur, mais pas le nom de la couleur elle-mme. Nous allons donc devoir ajouter une information de couleur grce la multiplication ! Le premier node avanc que vous devez connatre dans le Material Editor, c'est la multiplication. Ajoutez-en une avec clic droit Math - New Multiply. Ce node prend deux paramtres : par exemple, une texture et une constante. Pour assombrir une texture, il suffit de la multiplier par une valeur constante de 0.5 par exemple ! Mais nous, nous allons multiplier par une couleur, le rouge pur, pour reconstituer le canal rouge. Pour ce faire, utilisez ce node : clic droit - Constant New Constant3Vector. C'est quoi, cette constante ?
C'est un vecteur RGB, ou en langage courant : une couleur ! V ous avez juste 3 valeurs, de 0 1, chacune correspondant l'intensit de la couleur en question: R (rouge), G (vert) et B (bleu). V ous vous rappelez du but du TP? Supprimer le bleu dans l'image. V oici ma solution :
www.siteduzero.com
104/235
Ce qu'on vient de faire ici ne sert rien concrtement, comme vous vous en doutez sans doute. Mais ce que vous avez appris est indispensable. Ce TP avait pour but de vous montrer le fonctionnement des nodes, comment fonctionnent les canaux de couleur, l'addition, la multiplication, les constantes.
Les TextureCoordinate
Un outil assez pratique : le node TextureCoordinate se connecte l'entre des nodes TextureSample et vous permet de redimensionner l'image ainsi que de la rpter, sur les deux axes U (largeur) et V (hauteur). Un exemple avec des valeurs de 4 :
Si vous regardez votre model avec ce matriau, vous allez tre du : a rend trs mal. Il faut utiliser cet outil quand c'est ncessaire. Par exemple, pour ajouter du relief une texture de roche, il vous suffit de multiplier la Normal Map par elle-mme, mais avec un node TextureCoordinate cette-fois... Le rendu est saisissant: le niveau de dtail est bien plus fin, alors que vous n'avez au final rien ajout la texture !
www.siteduzero.com
105/235
www.siteduzero.com
106/235
Un matriau dynamique
Eh oui... Un matriau peut aussi tre dynamique ! V ous en avez srement dj vu dans des jeux vido, commencer par l'eau qui est le meilleur exemple. L'eau est toujours en mouvement. Nous allons voir un exemple plus amusant : la lave.
Le rsultat final que vous allez obtenir : cliquez pour voir l'animation
www.siteduzero.com
107/235
Il y a des modifications apporter ces deux textures : Il faut teindre en rouge la lave dans votre diteur d'image favori, et lui donner un format utilisable: 1024x1024. La roche doit tre modifie plus lourdement : outre les dimensions, il faudra lui enlever la couleur, l'assombrir, enlever les reliefs gnants avec un filtre passe-haut, et la rendre plus cailleuse d'apparence. Et enfin, il faut rendre ces deux textures "rptables", ou tileable en anglais. Cette technique bien connue des artistes 3D consiste modifier les bordures de l'image et supprimer les irrgularits les plus flagrantes dans la texture pour pouvoir la rpter en continu sur un plan sans que des coupures apparaissent. Pour cette opration, des outils tels que le tampon de texture de Photoshop sont extrmement efficaces.
Il n'y a plus qu' gnrer des Normal Map pour ces deux textures. V ous devez commencer avoir l'habitude !
www.siteduzero.com
108/235
Pas trs joli Pas terrible ! Ajoutons une multiplication et une Constant3Vector avec des valeurs extrmes (8 en R et 2 en G, soit une intensit multiplie par quasi 10 ! ) pour voir la diffrence.
Mieux, mais pas convainquant Le vrai problme c'est le mouvement : tout va dans le mme sens, c'est peu raliste, alors on va arranger un peu a. La solution est de dupliquer vos deux TextureSample ainsi que le Panner, et de modifier les rglages du nouveau Panner. Ensuite, multipliez les textures entre elles.
www.siteduzero.com
109/235
Un masque binaire : en noir, la lave, en blanc, la roche. Et maintenant, il ne vous reste plus qu' utiliser la multiplication sur chaque texture pour "masquer" les parties qui ne vous
www.siteduzero.com
110/235
intressent pas. Multiplier par du noir fait disparatre une texture, multiplier par du blanc la conserve. V ous allez avoir besoin du node OneMinus qui inverse blanc et noir : clic droit - Math - New OneMinus. N'oubliez pas que la roche n'met pas : elle doit se connecter Diffuse, tandis que la lave doit se connecter Emissive. Les normales elles, doivent tre multiplies, une par le masque, une par son inverse, puis ajoutes !
C'est probablement le matriau le plus compliqu que vous utiliserez pour l'instant. Sachez cependant que dans UT3 par exemple, nombre de matriaux sont encore bien plus complexes que celui-ci...
Instances et paramtres
Cette partie sera trs courte car elle ne servira pas tout le monde, nanmoins elle dcrit un outil pratique : les instances de matriaux. Dans certains cas, vous aurez besoin d'un Material complexe et utilisant beaucoup de textures diffrentes, mais en plusieurs versions : par exemple, une rouge et une bleue pour diffrencier des quipes. Plutt que de refaire deux fois le mme objet, il existe un mcanisme de paramtres qui vous permet de crer un matriau gnrique, dont vous ferez des instances qui vont hriter de son comportement, mais avec la possibilit de modifier ces paramtres. Les programmeurs devraient sourire : c'est en effet du vocabulaire de programmation oriente objet. Une fois encore, on va chercher rutiliser un maximum le contenu et il est logique d'utiliser les mthodes des programmeurs. On va reprendre l'exemple de la lave : supprimez votre node Constant3Vector qui donne sa couleur la lave, et remplacez le par ce nouveau node : clic droit - Parameters - New VectorParameter. Dans ses proprits en bas de l'cran, dveloppez la section Default Value et indiquez les valeurs que vous aviez choisies dans la partie prcdente. Puis, donnez-lui le nom "Color" par exemple avec le champ Parameter Name. Enfin, connectez le node au reste du schma pour prendre la place du Constant3Vector supprim.
www.siteduzero.com
111/235
Le VectorParameter en action V ous ne devriez pas constater un changement ! Fermez l'diteur et sauvegardez. V ous avez cr un matriau paramtre : vous pouvez maintenant crer une instance de ce matriau et configurer une valeur diffrente ! Pour ce faire, cliquez droit sur le matriau dans le Content Browser et choisissez Create New Material Instance (Constant). Indiquez un nouveau nom et continuez.
La fentre qui s'ouvre : l'diteur d'instances Pour diter le paramtre il vous suffit de cocher la case Color (le nom de votre paramtre), et de double-cliquer sur le nom du paramtre pour dvelopper le menu avec les composants R, G, B, A. C'est assez moche, mais peu importe : maintenant, vous savez crer des instances !
www.siteduzero.com
112/235
V ous pouvez crer de nombreux types d'instances : textures, couleurs, activation d'effets... C'est une technique qui n'est pas trs souvent utile, mais qui facilite considrablement la vie quand on en a besoin.
www.siteduzero.com
113/235
Un model d'exemple
Charge vous de raliser votre propre model anim. Une fois encore, aucun fichier d'exemple n'est associ au cours, c'est vous de raliser votre jeu ! L'objet que je vais vous prsenter est une tour de garde anime, qui tourne sur elle-mme via un engrenage gant. En bricolant un peu c'est faisable avec plusieurs StaticMeshes distincts transforms en Movers, mais pour l'exemple, on s'en contentera.
Une tour de garde rotative dans Blender que nous allons importer dans UDK
www.siteduzero.com
114/235
Importer le SkeletalMesh
Le fichier PSK
Le processus d'importation du fichier PSK se droule trs exactement comme pour un StaticMesh. Cliquez sur Import dans le Content Browser, choisissez votre fichier PSK, donnez-lui un nom avec par exemple le prfixe SK_, un nom de package, indiquez Mesh dans Grouping. Faites exactement comme pour un StaticMesh, il ne devrait pas y avoir de diffrence. En revanche, une fois l'objet import vous allez dcouvrir un nouvel diteur si vous double-cliquez sur votre nouveau SkeletalMesh.
www.siteduzero.com
115/235
Votre Material
Il n'y a pas de rgle spcifique pour le Material non plus. V ous avez besoin au minimum d'une Diffuse, faites l'effort d'une Normal Map et choisissez un PhysicalMaterial . C'est gnralement suffisant pour la plupart des objets, nul besoin de crer des matriaux complexes quand ce n'est pas ncessaire ! Une fois import, il va falloir assigner votre Material au SkeletalMesh. C'est la mme procdure que pour un StaticMesh, le menu est mieux cach. Il faut fouiller les proprits en bas droite. N'oubliez pas de sauvegarder votre package ensuite !
Crer un AnimSet
Pour commencer, dans le Content Browser, crez un AnimSet vide avec clic droit - New AnimSet. V ous pouvez choisir "Anim" comme nom de groupe ; le prfixe habituel chez Epic Games est K_ pour les AnimSet. Une fois dans l'diteur d'AnimSet, il faut choisir un SkeletalMesh comme objet de rfrence pour tester les animations. Par dfaut vous avez une brique, pas trs intressant... Dans le menu droulant de gauche, marqu "SkeletalMesh", choisissez votre SkeletalMesh tout neuf, qui devrait se charger dans la vue ! Une fois ce souci rgl, dans la mme zone de la fentre, passez de l'onglet Mesh l'onglet Anim.
www.siteduzero.com
116/235
Votre SkeletalMesh prt tre anim Maintenant, il suffit de faire File - Import PSA pour importer votre fichier PSA, qui contient lui les animations !
Tout en bas, vous avez un mini-lecteur d'animations : lecture, pause, lecture en boucle...
www.siteduzero.com
117/235
La bonne nouvelle, c'est que crer un PhysicsAsset est tout aussi simple que de gnrer les collisions sur un StaticMesh : cliquez droit sur votre SkeletalMesh et choisissez New PhysicsAsset. V ous pouvez laisser les options par dfaut, normalement, l'diteur qui va s'ouvrir cre un volume par bone, entoure prcisment chaque partie de votre mesh. C'est magique !
L'diteur de PhysicsAsset On pourrait en dire encore bien plus sur cet diteur. Il est possible de modifier trs prcisment les volumes, d'en ajouter de nouveaux... Mais l n'est pas notre souci, vous pouvez apprendre le reste par vous-mme ou avec UDN. N'oubliez pas de sauvegarder votre package avec tout son contenu avant de passer la suite !
Et voil le travail !
Au terme de cette partie vous disposez d'un SkeletalMesh anim, avec toutes les ressources ncessaires. Dans notre exemple, c'est un lment de dcor que nous allons placer dans une map, mais l'essentiel du temps un SkeletalMesh dispose de plusieurs animations et est prvu pour une arme ou un vhicule. Pour aller plus loin, comme toujours, UDN est votre premier choix. Importer un SkeletalMesh : http://udn.epicgames.com/Three/Importi [...] Tutorial.html Importer une animation : http://udn.epicgames.com/Three/Importi [...] Tutorial.html Importer un personnage : http://udn.epicgames.com/Three/FBXSkel [...] Pipeline.html
Placer le SkeletalMesh
V ous savez placer un StaticMesh ? V ous savez donc placer un SkeletalMesh ! V ous devez commencer bien connatre les mcanismes d'UDK Editor. Comme toujours, slectionnez votre SkeletalMesh dans le Content Browser, fermez ce dernier et dans la vue 3D, clic droit - Add New SkeletalMesh [..] here. Ensuite, vous devrez ajouter le PhysicsAsset votre mesh en fouillant des les options. L'image suivante devrait claircir la situation.
www.siteduzero.com
118/235
Dans les proprits du SkeletalMesh, section Display, vous pouvez rgler l'chelle pour rendre votre objet plus petit ou plus grand. Si votre objet est bien modulaire, vous n'aurez aucun souci le redimensionner sans que ses bords sortent de la grille, il peut donc tre plac parfaitement contre le sol.
La squence Kismet
Elle va tre extrmement simple en comparaison de ce que vous avez pu voir par le pass. Une simple squence Matinee suffira, ainsi qu'un dclencheur Level Loaded and Visible qui l'activera au dbut de la map. V ous allez juste modifier une proprit de la squence Matinee avec clic droit sur la squence Matinee - Expose Variable - bLooping que vous connecterez un boolan valant true (ou "1" dans ses proprits).
www.siteduzero.com
119/235
Cette erreur n'en est pas une - V ous voulez juste animer l'objet, pas le dplacer. Pas de rel problme donc, mais vous pouvez supprimer la Movement Track pour ne plus l'avoir. La deuxime tape est d'indiquer Matinee quel AnimSet utiliser. Pour ceci, slectionnez votre Group tout neuf, et dans ses proprits, vous pouvez ajouter un AnimSet - Celui que nous avons cr auparavant !
www.siteduzero.com
120/235
Il vous suffit enfin de slectionner la track Anim, de placer le curseur de temps 0 et d'ajouter une Key avec entre : Matinee va vous demander de choisir la squence jouer !
Votre fentre Matinee Si maintenant vous lancez votre animation, elle ne va se lancer qu'une fois. Nous avons cependant dfini notre squence comme infinie avec bLooping, on ne va pas s'arrter en si bon chemin ! Cliquez une fois du clic gauche sur la Key 0 (la flche montante prs de la longue barre bleue), puis avec clic droit - Set Looping vous pouvez faire jouer l'animation l'infini. V ous pouvez galement diminuer ou augmenter la vitesse avec Set Play Rate !
www.siteduzero.com
121/235
Le rsultat final
C'est termin, vous avez normalement anim votre model. Flicitations ! Pour obtenir des collisions, tapez F4 et dans l'onglet Collision, choisissez COLLIDE_BlockAll comme Collision type.
Une tour rotative fonctionnelle a y est, le SkeletalMesh n'a plus aucun secret pour vous !
www.siteduzero.com
122/235
Un systme de particules dans Cascade, l'diteur ddi Il va falloir commencer, une fois n'est pas coutume, par des dfinitions... Cette partie est diffrente des prcdentes : il n'y a pas de modle de travail, de procdure suivre. Tout ce que l'on peut faire ici, c'est prsenter ce que vous pouvez faire, et comment a marche !
La Particle
Une particule ou Particle dans UDK est un objet dynamique, mobile, gnralement utilis en groupe et pas seul. La particule est gnralement de petite taille et a une dure de vie habituellement de l'ordre de la seconde avant de disparatre ! Quelques exemples de particules : une feuille d'arbre qui tombe, un point lumineux dans une tincelle, une volute de fume...
Le ParticleEmitter
Un metteur de particules ou ParticleEmitter dans UDK est une source de Particles . C'est un objet qui fait apparatre un certain nombre de Particles une certaine vitesse. Un metteur de particules va par exemple gnrer des volutes de fume, des points lumineux pour une tincelle ou tout simplement faire apparatre des feuilles d'arbre.
Le ParticleSystem
Un systme de particules, que l'on nommera ParticleSystem, est un ensemble de ParticleEmitters qui constitue un effet complet. Par exemple, une explosion sera constitue d'un ParticleEmitter de fume, d'un ParticleEmitter de flammes, et peut-tre aussi d'une tincelle qui sera l encore un ParticleEmitter.
Les Modules
Courage, on va passer au concret ! Les Modules sont des effets appliqus aux ParticleEmitters . Ils permettent par exemple de modifier la couleur, la vitesse, le mouvement des Particles mises.
www.siteduzero.com
123/235
fonctionnement : un ParticleSystem est constitu de plusieurs ParticleEmitters auxquels vous appliquerez des Modules , ce qui gnrera des Particles .
www.siteduzero.com
124/235
Votre Material de fume : on s'y croirait ! V ous pourriez modifier ce matriau, en y ajoutant un effet alatoire avec le node Time et un dcalage de coordonnes. Si vous fouillez bien dans les matriaux de la dmo Night And Day d'UDK, vous pouvez retrouver des matriaux de fume pour les torches ainsi que les systmes de particules utiliss pour le feu ! V ous pouvez utiliser les filtres ParticleSystem et Material dans le Content Browser pour a.
Cascade, votre nouveau jouet Il va falloir vous rappeler de l'introduction et du vocabulaire ! Commenons par un briefing sur l'interface. En haut gauche, vous avez une visualisation de votre ParticleSystem avec un Material par dfaut. Chaque croix est une Particle ! Maintenez le clic droit enfonc pour vous dplacer dans la vue. En bas gauche, les options de ce dernier apparaissent. En haut droite, dans cette grande fentre : la liste des Emitters s'affiche, chaque colonne est un metteur. Chaque ligne est un module de l'metteur ! Si vous cliquez sur un Emitter, tout en bas gauche, les proprits changeront pour devenir celles de l'Emitter. En bas droite : l'diteur de courbes, qui vous permettra de choisir prcisment le comportement d'un module. Attardons-nous sur l'en-tte de chaque colonne, qui reprsente un Emitter.
www.siteduzero.com
125/235
Une lgende rapide pour comprendre tous ces boutons ! Vous pouvez changer le mode d'affichage, essayez ds maintenant. Et nous allons maintenant faire de mme pour les Modules .
Plus simple cette fois-ci ! Vous pouvez afficher le module dans les courbes en double-cliquant sur le bouton de droite.
Notre fume
Ce premier ParticleSystem se veut trs simple. Cliquez sur le module Required et dans les proprits, modifiez l'option Material pour y assigner votre Material !
Eh oui, a fait dj de la fume... Ou plutt de la vapeur rapide, on peut faire mieux que a.
www.siteduzero.com
126/235
Pour modifier les paramtres d'mission de vos particules de fume, il faut se pencher sur le module Spawn. Cette fois-ci, c'est bien plus complexe : en fouillant dans le menu Spawndes proprits, vous allez vous heurter ... des distributions ! Une distribution est un objet mathmatique trs compliqu dcrire. Ce n'est pas le but de ce cours ! Sachez simplement que c'est une faon de dcrire un ensemble de valeurs possibles ainsi qu'une rgle de choix de la valeur, qui est elle alatoire.
Nous commencerons trs simple... La distribution actuellement choisie est Constant, soit une seule valeur. Ca va, on aura connu pire ! Diminuez donc cette valeur de Spawn - Rate - Constant. V ous allez constater immdiatement l'effet... Ce n'est pas exactement ce qu'on voulait ! V oil les proprits que vous devriez rgler : Spawn Rate : j'ai choisi 10 personnellement ; Initial Size : j'ai choisi 100 comme valeur maximale sur X,Y et Z et 25 comme valeur minimale sur les trois axes galement ; Initial Velocity : Z, c'est vers le haut. X et Y sur les cts. A vous de choisir les valeurs minimales et maximales ! Si vous n'arrivez pas vous en sortir dans les proprits, pas de panique, la correction arrive !
www.siteduzero.com
127/235
La fume dans votre niveau, avec une chelle modifie ( F4 - Display - Draw Scale : 10 )
Nous allons maintenant dire un mot sur l'diteur de courbes, qui va tre indispensable pour raliser des effets complexes. Si vous vous tes intresss cette partie de la fentre, vous vous tes probablement demand mais bon sang, elles reprsentent quoi, ces courbes ? La rponse est simple : le graphe est en fonction du temps, et il reprsente l'amplitude d'un effet. Pas de panique, nous allons voir un exemple tout simple : la taille. V ous allez ajouter un nouveau module ! Dans la colonne vide sous les modules actuels, il suffit de faire Clic droit - Size - Size by life. Ce module va vous permettre de contrler les dimensions des particules. Ajoutez-le au graphe en double cliquant sur licne reprsentant une courbe sur le bouton du module.
Pour dplacer la vue des courbes, utilisez le clic gauche. V ous disposez de bouton en haut du cadre des courbes pour redimensionner automatiquement la vue.
www.siteduzero.com
128/235
Actuellement, vos trois courbes sont superposes. Elles commencent en 0, terminent en 1 sur l'axe des temps, gradu en secondes. Il reprsente le temps depuis l'apparition de la particule pour chaque particule. Tchez de bien comprendre ce principe : votre ParticleSystem durera gnralement l'infini pour un exemple de ce type, mais chaque particule ne dure qu'une seconde ! V ous pouvez rgler ceci dans le module Lifetime. Pour diter une courbe, trs simple : Clic droit sur un sommet de la courbe - vous pouvez changer le temps avec Set Timeou changer la valeur avecSet Value. V ous aurez besoin de recommencer pour faire la manipulation trois fois au total, une fois pour chaque courbe. Changez la valeur du point d'arrive pour y indiquer 2 secondes.
Une courbe modifie : notez l'effet sur la fume, elle s'largit en haut ! Chaque particule voit sa taille augmenter avec le temps.
www.siteduzero.com
129/235
En images...
www.siteduzero.com
130/235
Un Sound est un objet basique sans aucun traitement. Adapt aux sons simples, il ne permet pas d'effets avancs. En revanche, un SoundCue est un son qui a subi des traitements et fait appel un ou plusieurs Sounds . Ca ne vous rappelle rien ? Eh si... C'est le mme principe que les Textures et les Materials ! D'une manire gnrale, vous utiliserez des SoundCue l'essentiel du temps, notamment en programmant soit avec Kismet, soit avec UnrealScript que nous verrons plus tard.
www.siteduzero.com
131/235
Le processus d'importation doit vous tre familier maintenant : cliquez sur Import dans le Content Browser, slectionnez votre son et importez-le. V ous pouvez utiliser le prfixe A_ pour les sons, comme Epic Games, et le groupe Sound. UDK crashe ou j'ai un message d'erreur !
V otre son est probablement au mauvais format ou ne respecte pas les conditions nonces.
Le son import !
Crer un SoundCue
Nous allons reprendre le mme principe que d'habitude : clic droit - New SoundCue. Ajoutez le suffixe _Cue pour indiquer la diffrence, et reprenez le mme nom que vous Sound. Nous allons lui ajouter des effets ! Pour ce faire, une fois n'est pas coutume vous devrez cliquez droit sur le SoundCue et choisir Edit Using Sound Cue Editor. Double cliquer sur le SoundCue ne fera que le jouer !
Votre SoundCue tout neuf Pour ajouter votre Sound, vous devrez d'abord ouvrir le Sound Cue Editor, puis redimensionner sa fentre, slectionner le Sound et revenir la fentre du Sound Cue Editor pour cliquer droit dans la vue centrale et choisir l'option
www.siteduzero.com
132/235
Le son ajout ! Nous allons maintenant ajouter divers nodes avec le menu du clic droit. N'hsitez pas exprimenter et tester ! Le principe de l'diteur vous est maintenant familier, c'est le mme que celui des Material . Pour couter le rsultat, slectionnez un node et cliquez sur le bouton lecture tout en haut gauche. L'exemple prsent ici ajoute un effet d'cho au son en y ajoutant une copie retarde, et le joue en boucle.
www.siteduzero.com
133/235
UTMapMusic Le principe est de dcouper votre musique en portions intressantes suivant le contenu de votre musique. C'est vous de faire ce travail, en dehors d'UDK. Ensuite, vous pouvez crer un UTMapMusic sur le modle de ceux qui vous sont proposs avec UDK, et les attribuer votre map dans le menu World Properties. Attention, les maps de type UDKMapInfo ne grent pas cette musique. Il faudra donc utiliser le modle UTMapInfo, qui lui s'adresse une map pour Unreal Tournament. A vous de recrer ce mcanisme pour vos niveaux l'aide du code source. Pas de panique : nous allons bientt apprendre programmer pour UDK !
www.siteduzero.com
134/235
UDN
Une fois encore, voici quelques pistes pour continuer ! Le son en gnral sur UDN : http://udn.epicgames.com/Three/AudioSystem.html Guide d'utilisateur du SoundCue Editor, galement sur UDN : http://udn.epicgames.com/Three/SoundCu [...] serGuide.html Un cours de Hourences sur le son dans UDK : http://www.hourences.com/tutorials-ue3-sound/ Cette dernire sous-partie clt le chapitre sur la cration de contenu. V ous avez probablement encore beaucoup de questions poser : sachez utiliser la documentation pour y rpondre ! N'hsitez pas demander galement sur le forum si vous tes perdus sur un point prcis. La prochaine partie du cours va vous enseigner la programmation dans UDK ! A la fin de cette partie, vous devriez savoir comment crer et importer un environnement, des personnages, des sons... Cette partie est essentielle, crer du contenu est une tche longue, difficile, qui peut occuper une grande quipe pendant des mois ! Sachez rpartir les tches si vous vous lancez dans votre jeu.
www.siteduzero.com
135/235
Introduction
Bienvenue dans cette nouvelle partie. Ici, nous allons apprendre programmer avec UDK !
Prrequis
Tout comme la partie prcdente, cette partie ne s'aborde pas sans connaissances au pralable. Ici, c'est simple : vous devez avoir pratiqu un langage impratif orient objet, comme par exemple Java ou C++. Ce sont les deux langages les plus proches d'UnrealScript, mme si ce dernier a de nombreuses variations de syntaxe, l'esprit est identique. Bien sr, inutile de devenir un expert en Java pour apprendre UnrealScript. V ous devez simplement matriser les notions basiques de la programmation oriente objet : Classes et instances Hritage Mthodes, attributs En clair, ne vous lancez surtout pas dans ce cours si vous n'avez jamais programm ou si vous n'avez jamais manipul de code orient objet, vous n'allez rien y comprendre. Si vous n'avez que des notions basiques et peu d'exprience, en revanche, ne vous inquitez pas, tout se passera bien.
UnrealScript
Le langage que vous allez apprendre dans ce cours s'appelle UnrealScript. Contrairement ce que son nom pourrait laisser croire, ce n'est absolument pas un simple langage de script, mais un langage fortement inspir de Java et C++, qui s'excute dans une machine virtuelle conue par Epic Games. Ce code est compil pour plus de performances. Le rsultat est trs intressant : UScript est performant, mais ne causera pas un crash d'UDK en cas d'erreur comme a pourrait tre le cas avec des langages natifs. Nous utiliserons dans ce cours deux outils : l'IDE Eclipse, et Unreal Frontend. UDK Editor ne vous servira qu' tester vos rsultats ou manipuler le contenu.
www.siteduzero.com
136/235
Installer Eclipse
Avant tout, vous avez besoin de Java. Cliquez ici pour tlcharger Java. Choisissez la version adapte votre systme - A priori, le premier lien (Windows XP Seven, 32 bits) fonctionnera pour tout le monde. Une fois Java tlcharg et install, vous pouvez vous procurer Eclipse. Cliquez ici pour tlcharger Eclipse. Ici, c'est plus difficile, il existe plusieurs versions. Celle que je vous recommande est Eclipse IDE for C/C++ Developers (includes Incubating components) .
Une fois cette information indique, Eclipse devrait terminer de se lancer et afficher son bureau d'accueil.
www.siteduzero.com
137/235
V ous pouvez cliquer sur le bouton Workbench qui se trouve droite pour ouvrir la vue principale d'Eclipse, celle que vous utiliserez tout le temps !
A gauche, l'explorateur de fichiers. Au centre, la vue de code. A droite, vous aurez une liste de fonctions, trs utile
Crer un projet
Un projet, dans notre situation, ne sera rien de plus qu'une liste des fichiers source utiliss. Tout ici sera bien plus simple que dans un projet C++ par exemple. Pour crer un projet, il suffit de faire clic droit - New Project dans la vue de gauche.
www.siteduzero.com
138/235
Cliquez sur Finish ! Cette fois c'est fait : vous avez un projet configur, et dans la vue de gauche, vous avez votre disposition l'ensemble du code source UnrealScript fourni avec UDK.
Je viens de crer le dossier zGame... a va servir trs vite ! Nous allons faire un petit point sur cette arborescence. Tous les dossiers doivent contenir un sous-dossier Classes. Ne me demandez pas pourquoi, la rponse est un peu
www.siteduzero.com
139/235
longue... UTGame et UTGameContent sont les deux dossiers contenant le fragment d'Unreal Tournament 3 fourni avec UDK. V ous avez le droit d'utiliser ce code, contrairement au contenu du jeu lui-mme (armes, dcors, ...) le code est rutilisable lgalement. Cependant, je vous encourage vous en passer tant que possible car il est assez lourd. Le dossier Engine contient les classes que vous utiliserez tous les jours, le plus bas niveau du code UDK. V os propres classes en hriteront Enfin, le dossier UDKGame reprsente le code utilis dans les dmos UDK, c'est une autre base de dpart potentielle. V ous pouvez donc maintenant crer votre propre dossier (Clic droit - New Folder) en le plaant la racine du projet, dans Src. Nous y ajouterons notre code dans les parties suivantes ! Maintenant, il faut associer l'extension des fichiers UnrealScript, .uc, un langage connu par Eclipse. Ca sera le C++. Pour ce faire, suivez le guide dans Window - Preferences :
Il vous suffit de renseigner ces champs Eclipse ne connat pas vraiment le langage UnrealScript, il faut donc lui indiquer de ne pas vrifier les erreurs. Deux options sont utiles : C++ - Editor - Report problems as you type (option dcoche) ; C++ - Code Analysis (tout dcoch).
www.siteduzero.com
140/235
Configurer UDK
Il va falloir indiquer UDK o trouver vos fichiers pour la compilation, que nous verrons plus tard. Pour ce faire, ditez le fichier UDK/UDKGame/Config/DefaultEngine.ini . V ous devez y reprer les lignes suivantes et ajouter la dernire : Code : Ini [UnrealEd.EditorEngine] +EditPackages=UTGame +EditPackages=UTGameContent +EditPackages=zGame
Ne lancez pas UDK Editor pour l'instant, puisqu'il va vouloir compiler le code dans le dossier zGame, or vous n'en avez pas. Patience !
Et voil, vous tes prts pour UnrealScript ! V ous tes maintenant prt passer aux choses srieuses : la programmation, et vos premiers objets !
www.siteduzero.com
141/235
Tlcharger la zCrate
www.siteduzero.com
142/235
Le StaticMesh, nomm SM_Cube ; Le MaterialInstance, MI_zCrate. Si vous avez oubli ce qu'est une instance de matriau, c'est la mme chose qu'une classe hrite en programmation : c'est donc un Material, mais qui se base sur un autre Material, galement fourni (M_GenericLitMetal).
Avant de commencer, placez le package UPK tlcharg dans UDK/UDKGame/Content. On va s'en servir trs vite !
Si vous ne matrisez pas l'anglais, ce bloc indique que la classe Actor est la premire de toutes, en quelque sorte.
Commenons en douceur...
V ous pouvez crer un fichier dans le dossier zGame/Classes, et le baptiser zCrate.uc. Note importante pour la suite : votre fichier doit porter le mme nom que la classe qui y est dfinie. Nous allons donc commencer par hriter de la classe Actor. La syntaxe va tre familire aux programmeurs : Code : Java class zCrate extends Actor;
www.siteduzero.com
143/235
Je ne vous cache pas qu' ce niveau, votre fichier ne sert pas grand chose. Pire encore : si vous compiliez votre code maintenant, la zCrate n'apparatrait mme pas dans UDK Editor. Pour y remdier, il faut utiliser le mot-clef placeable, qui signifie "utilisable dans UDK Editor". V oici donc la dclaration mise jour : Code : Java class zCrate extends Actor placeable;
Et maintenant, nous allons dj parler, aprs seulement deux lignes, d'un mcanisme diffrent de ce quoi vous tes habitus : la gestion des proprits .
Et maintenant, passons la syntaxe des proprits par dfaut. V oici donc la syntaxe que vous emploierez pour dfinir du contenu dans une classe UnrealScript, dans la section defaultproperties : Code : Java Begin Object class=(Classe utilise) name=(Nom de l'objet) // Proprits de l'objet End Object) Components.Add((Nom de l'objet))
Difficile d'expliquer en une seule ligne tout ce que l'on peut faire avec cette syntaxe, il faudra les exemples au fur et mesure pour bien s'en apercevoir. Pas de panique, un exemple, tout de suite ! Si vous n'avez pas dj oubli la caisse, c'est elle que nous voulons faire apparatre. Cette caisse est fournie sous la forme d'un StaticMesh, nous allons donc utiliser un StaticMeshComponent. On rappelle qu'un StaticMesh est un objet dessin dans un modeleur 3D et import dans UDK ! Code : Java Begin Object class=StaticMeshComponent Name=MyStaticMeshComponent StaticMesh=StaticMesh'zGameTest.Mesh.SM_Cube' End Object Components.Add(MyStaticMeshComponent)
Qu'avons-nous fait en ces quelques lignes ? Nous avons dclar la variable MyStaticMeshComponent, de type StaticMeshComponent, et dans sa proprit StaticMesh nous avons assign l'objet zGameTest.Mesh.SM_Cube de type StaticMesh. Tout va bien ?
www.siteduzero.com
144/235
Il vous faut cependant un second objet : un DynamicLightEnvironmentComponent, qui a un nom trs long, mais qui est indispensable. Cet attribut permettra UDK d'clairer votre objet, et mme de l'clairer de faon dynamique, ce qui se rvlera trs utile plus tard. Code : Java Begin Object class=DynamicLightEnvironmentComponent Name=MyLightEnvironment bEnabled=true bDynamic=true End Object Components.Add(MyLightEnvironment)
Et le pige, c'est qu'il faut maintenant indiquer au StaticMeshComponentd'utiliser l'clairage ! V oici le code corrig du StaticMeshComponent: Code : Java Begin Object class=StaticMeshComponent Name=MyStaticMeshComponent StaticMesh=StaticMesh'zGameTest.Mesh.SM_Cube' LightEnvironment=MyLightEnvironment End Object Components.Add(MyStaticMeshComponent)
Et maintenant, il est temps de compiler votre code ! Rassurez-vous, tout va tre trs simple si vous avez bien suivi jusqu'ici. Il suffit de lancer Unreal Frontend et de cliquer sur Scripts - Compile Scripts, ou tout simplement sur F4. V ous devriez obtenir un message de ce type dans la fentre de log, tout en bas : Citation : Unreal Frontend [COMMANDLET 'UDK.exe make' STARTED IN ''] oct. 2, 4:47 Init: Version: 8623 Init: Epic Internal: 0 Init: Compiled (32-bit): Jun 23 2011 05:43:19 Init: Command line: Init: Base directory: D:\UDK\Binaries\Win32\ Init: Character set: Unicode Log: Executing Class UnrealEd.MakeCommandlet
www.siteduzero.com
145/235
Il s'agit ici d'un rsultat parfait sans aucune erreur ou warning. Faites bien attention aux messages d'erreur (Orange pour les warnings, rouge pour les erreurs) qui indiquent toujours un problme grave. Entranez-vous aussi comprendre ces logs : ici, tous les dossiers de votre projet ont t vrifis, et seul le dossier zGame a t recompil. Si vous avez le malheur de cliquer sur Full recompile, vous serez oblig de prendre un caf en attendant la fin... Si vous lancez UDK sans avoir recompil un script modifi, il vous proposera de lancer une compilation au dmarrage.
Maintenant, il est justement temps de lancer UDK. Avant toute chose, si vous n'avez pas relanc UDK Editor depuis l'installation de la caisse, vous devez vrifier que le package zCrate apparat bien dans le Content Browser, et le charger avec clic droit Fully Load. Ensuite seulement, une fois que les fichiers du package sont bien visibles, vous pouvez faire un tour dans le menu Actor Classes , vous vous souvenez de lui ? c'est le deuxime onglet du Content Browser, qui lui s'ouvre avec CTRL + F depuis la vue principale.
www.siteduzero.com
146/235
Regardez bien l'arborescence... Nous avons un petit nouveau ! Une fois votre zCrate slectionne, il suffit de fermer cette fentre et de l'ajouter dans votre vue 3D avec clic droit Add zCrate here.
www.siteduzero.com
147/235
Maintenant, la suite de ce cours va vous permettre d'apporter des fonctions supplmentaires cette caisse. V ous avez peut-tre remarqu qu'elle n'a aucune collision, par exemple ! Ne vous en faites pas, bientt, ceci ne sera qu'un mauvais souvenir.
www.siteduzero.com
148/235
Et voil, vous ne foncez plus l'intrieur de la caisse. C'est mieux, non? Les collisions sont toujours un sujet sensible dans le jeu vido ; elles sont gnralement soit trop gourmandes en ressources, soit inefficaces. V ous verrez plus tard que les collisions UDK peuvent se faire dynamiquement sur les objets anims, c'est bien plus complexe.
Une autre proprit trs pratique est celle qui indique l'diteur d'aligner l'objet sur la grille. Son petit nom est bEdShouldSnap, et c'est un boolen : sa valeur peut tre true (vrai) ou false (faux). Code : Java bEdShouldSnap=true
Notez que ces deux caractristiques ne prennent effet que quand vous ajoutez un nouvel objet dans un niveau. Les objets existants ne sont pas impacts car les catgories sont cres quand vous placez l'objet et elles sont sauvegardes avec le niveau.
www.siteduzero.com
149/235
L'hritage d'Actor
Depuis le temps, vous vous demandez probablement quoi sert exactement la classe Actor. La rponse va intervenir peu peu, mais vous en avez dj un lment : le CollisionComponent ! Cet attribut est en effet hrit d'Actor. Nous allons continuer l'explorer avec votre premire mthode : PostBeginPlay. PostBeginPlay est une mthode appele au dmarrage du jeu, juste aprs que la partie soit dmarre. Dans la mesure o elle est dfinie par Actor, nous allons donc la redfinir en la dclarant dans zCrate.uc. V oici sa dclaration : Code : Java simulated function PostBeginPlay() { }
Si vous suivez bien, il y a quelque chose qui devrait vous choquer ici... Simulated n'est pas un mot-clef habituel en programmation. C'est en l'occurrence un mot-clef spcifique UnrealScript, qui dfinit le comportement de la fonction vis--vis du rseau pour les parties multijoueurs, dans les classes hritant de Actor. Pour l'instant, contentez-vous de l'indiquer systmatiquement, vous n'en tes pas encore l. Gardons tout ceci en tte, parce qu'avant de grer notre MaterialInstance, il va falloir discuter du cas de ce dernier.
Les attributs
Le principe de la manipulation d'un Material , ou d'une animation, d'un systme de particules... est toujours le mme. Le principe est le suivant : On cre le contenu, bien sr ; Pour chaque contenu que l'on cherche manipuler, on cre un attribut du type correspondant dans notre Actor ; On indique le chemin du contenu pour chaque attribut dans defaultproperties, avec son type ; Enfin, pour manipuler le contenu, on utilise systmatiquement l'attribut, qui correspond en fait une instance du contenu en question ! Pour claircir le principe, voici un exemple. Nous allons manipuler trois attributs pour modifier le halo lumineux de notre zCrate : Une rfrence au StaticMesh ; Une rfrence au MaterialInstance employ ; Un attribut qui stockera la couleur du halo. Nous allons donc dclarer ces trois attributs. La dclaration d'attributs se fait juste en dessous de la dclaration de la classe ellemme, avant la section defaultproperties. Les fonctions, elles, seront dfinies entre les attributs et defaultproperties. Code : Java var StaticMeshComponent Mesh; var MaterialInstanceConstant MaterialInstance; var LinearColor LightColor;
Mesh et LightColor restent simples manipuler dans defaultproperties. Faites juste attention ne pas ajouter d'espace. Code : Java Mesh=MyStaticMeshComponent LightColor=(R=5.0,G=1.0,B=0.5,A=1.0)
Le code couleur, comme vous le constatez, indique les trois composantes Red, Green, Blue, ainsi que l'Alpha qui sera de 1.0 tout le temps, priori. Les couleurs vont normalement de 0.0 1.0, mais dans Unreal Engine, saturer la couleur avec des composantes
www.siteduzero.com
150/235
Manipuler un MaterialInstance
Dans la section StaticMeshComponent de defaultproperties, il va maintenant falloir indiquer UnrealScript quel est le Material que vous avez choisi d'employer. Courage, c'est fini pour les proprits et le copier-coller sans grand intrt que constitue souvent defaultproperties, parce que nous allons passer votre premire fonction ! Code : Java Begin Object class=StaticMeshComponent Name=MyStaticMeshComponent StaticMesh=StaticMesh'zGameTest.Mesh.SM_Cube' Materials[0]=MaterialInstanceConstant'zGameTest.Material.MI_zCrate' LightEnvironment=MyLightEnvironment End Object
En effet, nous allons enfin pouvoir revenir notre fonction PostBeginPlay. Dans celle-ci, nous allons faire deux choses : Appeler la fonction PostBeginPlayparente avec le mot-clef Super, que vous devez absolument connatre ; Crer une rfrence sur notre Material : on utilisera la fonction CreateAndSetMaterialInstanceConstant, qui prend en paramtre le numro du Material modifier, ici nous n'en avons qu'un, a sera donc 0 ; Modifier la couleur, c'est quand mme l'objectif de tout a ! Et pour ce faire, nous allons modifier un paramtre du MaterialInstance fourni dans le package UPK. Si vous avez la curiosit de l'observer, vous verrez que 'LightColor' contrle la couleur du canal Emissive du Material. Si cette explication vous semble obscure, vous avez probablement besoin de relire la fin du chapitre sur les Material.
Et voici le rsultat : Code : Java simulated function PostBeginPlay() { Super.PostBeginPlay(); MaterialInstance = Mesh.CreateAndSetMaterialInstanceConstant(0); } MaterialInstance.SetVectorParameterValue('LightColor', LightColor);
Si vous l'avez dj l'oubli, il faut dclarer cette fonction aprs les attributs, et avant defaultproperties. Et maintenant, vous pouvez compiler votre code et le tester. Normalement, votre objet devrait tre rouge.
www.siteduzero.com
151/235
Si votre objectif tait de rendre la caisse rouge dfinitivement, il valait bien mieux le rgler directement depuis le MaterialEditor ! Mais ce n'est pas notre cas, car nous allons maintenant modifier la couleur de la caisse quand elle prend des dgts... Et a, c'est impossible sans UnrealScript.
Ensuite, vous devriez savoir modifier la couleur. Je vous conseille de crer deux attributs de couleur diffrents : un rouge, un bleu. Une demi-seconde aprs avoir encaiss un tir, elle repasse au bleu. V ous devez donc crer une fonction qui son tour appelle la modification de couleur, en appelant cette fonction quand la zCrate encaisse ( ) des dgts : Code : Java SetTimer((dure),false,(nom de la fonction));
V oil, vous avez absolument toutes les clefs en main pour russir cet exercice ! N'oubliez pas de nommer votre niveau DMquelquechose pour avoir accs une arme. C'est votre premier TP, prenez le temps de russir !
Correction
www.siteduzero.com
152/235
Si vous n'avez pas russi, avant de regarder ce code je vous encourage faire une recherche (CTRL + H sous Eclipse) pour retrouver des appels aux fonctions que je vous ai donn et comprendre leur fonctionnement. Sinon... V oici le fichier UnrealScript complet : Secret (cliquez pour afficher) Code : Java class zCrate extends Actor HideCategories(Display,Collision,Physics) placeable; var var var var StaticMeshComponent Mesh; MaterialInstanceConstant MaterialInstance; LinearColor LightColor; LinearColor HitLightColor;
simulated function PostBeginPlay() { Super.PostBeginPlay(); MaterialInstance = Mesh.CreateAndSetMaterialInstanceConstant(0); MaterialInstance.SetVectorParameterValue('LightColor', LightColor); } simulated function TakeDamage(int DamageAmount, Controller EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType, optional TraceHitInfo HitInfo, optional Actor DamageCauser) { MaterialInstance.SetVectorParameterValue('LightColor', HitLightColor); SetTimer(0.5,false,'ResetLight'); } simulated function ResetLight() { MaterialInstance.SetVectorParameterValue('LightColor', LightColor); } defaultproperties { Begin Object class=DynamicLightEnvironmentComponent Name=MyLightEnvironment bEnabled=true bDynamic=true End Object Components.Add(MyLightEnvironment) Begin Object class=StaticMeshComponent Name=MyStaticMeshComponent StaticMesh=StaticMesh'zGameTest.Mesh.SM_Cube' Materials[0]=MaterialInstanceConstant'zGameTest.Material.MI_zCrate' LightEnvironment=MyLightEnvironment End Object Mesh=MyStaticMeshComponent Components.Add(MyStaticMeshComponent) CollisionComponent=MyStaticMeshComponent LightColor=(R=0.5,G=1.0,B=5.0,A=1.0) HitLightColor=(R=5.0,G=1.0,B=0.5,A=1.0) bEdShouldSnap=true bCollideActors=true bBlockActors=true
www.siteduzero.com
153/235
Et ensuite ?
V ous vous rappelez de notre mine avec Kismet ? V ous venez quasiment d'en refaire une... V otre caisse change de couleur quand on tire dessus, a ne devrait pas tre bien difficile de lui faire infliger des dgts ! Bien sr, ce chapitre s'arrte ici. Mais vous devez comprendre qu'il ne faut pas en rester l : ayez la curiosit d'aller plus loin et d'ajouter des fonctions. Et si vous ne savez pas comment faire, fouillez le code !
Pour conclure
Au terme de cette partie, les bases du langage devraient vous tre un peu plus claires. N'hsitez pas regarder des codes d'exemple dans les dossiers UTGame ou UDKGame par exemple, c'est l que vous pouvez tout apprendre ! V ous avez utilis des fonctions dans cette partie, ayez la curiosit de chercher leur code source par exemple, pour vous familiariser avec la syntaxe d'UnrealScript. V ous pouvez aussi chercher les endroits du code d'UDKGame qui font appel des choses que vous avez vues ici, o encore tudier le code des StaticMeshes (Engine/Classes/StaticMesh.uc, et les classes dont il hrite). Soyez curieux !
www.siteduzero.com
154/235
Le SkeletalMesh en dtail
Comme vous vous en souvenez probablement, le principal intrt d'un SkeletalMesh par rapport un StaticMesh rside dans sa capacit tre anim. C'est en fait un peu plus que cela : le SkeletalMesh vous permet de grer la physique de manire avance, il peut tre dform et vous pouvez mme trs facilement vous en servir comme base pour y connecter des ParticleSystem, voire tout simplement... Un autre SkeletalMesh ! Pour expliquer ce concept, voici une vue d'un SkeletalMesh que j'utilise pour une tourelle antiarienne.
Cliquez pour agrandir ! Dans cette image, vous avez deux vues qui reprsentent chacune un systme propre au SkeletalMesh : gauche, un squelette d'animation avec trois bones numrots de 0 2. Le bone 0 est l'origine du mesh, son point d'attache au sol ici ; droite, une vue que vous ne connaissez pas : les sockets .
Je vous parlais l'instant de connecter du contenu supplmentaire l'objet, c'est exactement a que servent les sockets ! C'est un point bien prcis sur votre objet que vous placerez directement dans UDK Editor sur votre SkeletalMesh frachement import, et qui a les caractristiques suivantes : il est possible de le grer directement dans le code UnrealScript pour y connecter un contenu ; il est associ un bone, ce qui signifie qu'il suivra le mouvement li l'animation ! Si vous faites attention aux noms des sockets de l'image prcdente, vous comprendrez peut-tre leur intrt : l'un d'eux est la source de la fume que le canon met quand il est endommag, d'autres correspondent aux effets spciaux affichs l'embouchure des canons, un autre indique au code UnrealScript le point de vue du joueur quand il pilote ce canon... Le concept de socket va tre indispensable quasiment tous vos SkeletalMeshes ! Pour les manipuler, c'est simple : il suffit d'ouvrir l'diteur de SkeletalMesh et de cliquer sur Mesh - Socket Manager. V ous en aurez la liste ainsi que la possibilit de les diter, supprimer, ou bien sr, d'en ajouter !
www.siteduzero.com
155/235
L'diteur de sockets Avant de passer la suite, voici une autre image, celle-ci tire d'Unreal Tournament 3... Secret (cliquez pour afficher)
156/235
L'arme que nous allons raliser est une sorte de fusil d'assaut projetant un faisceau de plasma sur l'ennemi. Si vous tes un joueur d'Unreal Tournament, la ressemblance avec le fusil de choc devrait vous frapper rapidement. Les ressources ncessaires sont donc : Un SkeletalMesh qui ncessite son tour : un Material ; plusieurs Textures associes. Un ParticleSystem pour l'effet de faisceau plasma; Pour chaque composante de l'effet, nous aurons besoin d'un Material ; ...et donc des Textures associes. Un autre ParticleSystem pour l'effet d'impact du tir, avec les mmes contraintes que le prcdent Allez, mettons tout a en images !
La liste complte, sous forme d'arbres, des ressources ncessaires ! V ous pouvez observer trois branches : droite, le SkeletalMesh, au centre les ressources de l'effect d'impact, et tout gauche le faisceau. Il faut vraiment faire tout a pour une arme ?
V ous pouvez faire bien plus simple, en vous passant du faisceau et en simplifiant l'effet d'impact un simple Material. Mais l'objectif de cette partie est tout de mme de vous montrer la puissance d'UDK !
www.siteduzero.com
157/235
Tout ce contenu vous est fourni libre de droits, faites-en ce que bon vous semble.
www.siteduzero.com
158/235
Le nom de l'arme est donc W_BurnerRifle. V ous avez le droit de choisir un autre nom, n'oubliez juste pas que c'est aussi le nom du package et que ce dernier ne changera pas. Maintenant, vous devriez vous souvenir de la gestion d'un StaticMesh dans le code... V ous l'avez fait pour la zCrate ! Cette fois, cependant, c'est un peu diffrent : nous hritons d'une classe qui a dj des attributs pour grer l'affichage du SkeletalMesh que nous voulons utiliser. Nous avions employ la syntaxe suivante : Code : Java Begin Object class=(Classe utilise) name=(Nom de l'objet) // Contenu End Object) Components.Add((Nom de l'objet))
Cependant, l'attribut class n'est utile que lorsqu'on dclare la variable. Ici, a a dj t fait, nous nous contentons de rgler la valeur ! Code : Java defaultproperties { Begin Object Name=FirstPersonMesh SkeletalMesh=SkeletalMesh'W_BurnerRifle.Mesh.SK_BurnerRifle' End Object }
Ce code doit absolument tre clair pour vous. C'est le principe de base de la section defaultproperties. Il faut encore faire quelques rglages sur cette arme... Le premier, c'est l'chelle : vous en aurez toujours forcment besoin ! Une arme n'est jamais exactement la bonne taille... Heureusement, l'attribut Scale de votre mesh est l pour vous sauver. La second rglage est plus drle : c'est la position de l'arme dans votre vue en premire personne. Par dfaut, vous aurez probablement une arme mal place ou qui rentrera dans votre figure. L encore, un attribut : PlayerViewOffset. Comment dterminer sa valeur ? Malheureusement, la seule solution est d'essayer peu peu jusqu' obtenir le bon rendu... Enfin, il faut enregistrer une rfrence de notre nouveau mesh, comme nous l'avions fait pour la zCrate avec le MaterialInstanceConstant. a servira par la suite ! Et voici le code final pour votre arme qui ne tire pas encore : Code : Java
www.siteduzero.com
159/235
V ous pouvez sauvegarder, et recompiler vos scripts avec Unreal FrontEnd. Nous allons tester votre arme !
Je vous encourage essayer, sur une map que vous avez ralise ou sur une map existante. V ous devriez dj avoir une arme visible !
Oui, c'est normal. Elle n'est pas cense faire quoi que ce soit de plus que s'afficher. Un peu de patience !
www.siteduzero.com
160/235
Ce code rgle les deux principaux modes de tir : on a dsactiv le bouton droit, et a rgl un mode de tir Instant Hit sur le bouton gauche. Instant Hit ?
En franais, cela signifie "tir instantan". Pour faire simple, votre arme inflige des dgts en ligne droite, sans projectile proprement parler. Elle touche instantanment et avec une prcision parfaite. Bien sr, a n'est pas trs raliste, mais c'est trs simple grer ! J'en veux pour preuve la suite du code. Code : Java InstantHitDamage(0)=50 FireInterval(0)=+0.77 ShouldFireOnRelease(0)=0 ShotCost(0)=1 AmmoCount=42 MaxAmmoCount=42
Cette liste de proprits ne doit pas tre prise comme LE code crire pour grer une arme, plutt comme un exemple. Ici, on rgle successivement : les dgts du tir ; le temps de rechargement ; le tir l'appui (0) ou au relchement (1) ; le cot en munitions d'un tir ; le nombre de munitions initial ; la quantit maximale de munitions. Ces proprits sont extrmement courantes et classiques : impossible de ne pas les traiter dans ce cours. V ous pouvez ds maintenant les tester, les modifier... Car dsormais, votre arme fonctionne ! En revanche, elle n'aura aucun effet spcial ou son associ, elle se contente d'infliger des dgts. SI les bots vous font peur, vous pouvez placer une zCrate dans votre map... Rappelez-vous, cet objet qui change de couleur quand un tir le touche !
www.siteduzero.com
161/235
fonctionnelle. Et a ne s'arrte pas l puisque le son est galement gr dans UTWeapon. Pour ajouter des sons de tir votre arme, il suffit donc de faire appel aux sons du fusil de choc d'UT3. Code : Java WeaponFireSnd[0]=SoundCue'A_Weapon_ShockRifle.Cue.A_Weapon_SR_FireCue' WeaponEquipSnd=SoundCue'A_Weapon_ShockRifle.Cue.A_Weapon_SR_RaiseCue' WeaponPutDownSnd=SoundCue'A_Weapon_ShockRifle.Cue.A_Weapon_SR_LowerCue' PickupSound=SoundCue'A_Pickups.Weapons.Cue.A_Pickup_Weapons_Shock_Cue'
Rien ajouter ce code : l encore, 0 fait rfrence au premier mode de tir, celui du bouton gauche. La plupart des attributs d'UTWeapon font la distinction.
V ous en avez assez d'crire du code dans defaultproperties ? Bien, passons des choses plus intressantes !
Actuellement, il manque trois choses votre arme que vous ne pouvez pas vous permettre d'oublier, si vous voulez raliser un jeu srieux. En voici la liste : Si vous vous placez en vue la troisime personne, avec la touche F par exemple, votre arme est invisible. Elle le serait aussi si un bot la ramassait. Il manque un effet au tir, pour montrer clairement que l'arme a tir V otre arme n'a aucun effet l'impact sur un mur, par exemple. La raison essentielle de ces trois manquements est que votre arme, telle qu'elle est, n'est qu'une coquille vide qui fait des tirs. Il manque tout le code de gestion des effets ! Et pas qu'un peu, puisque nous allons crer un nouveau fichier entier pour ce code.
La classe UTWeaponAttachment
Nous allons nous intresser la classe UTWeaponAttachment. Elle est trs lie UTWeapon et a pour responsabilit tous les effets visuels qui ne sont pas visibles en vue la premire personne (dite vue FPS), ou ceux qui sont visibles la fois en vue FPS et en vue non-FPS. a veut dire que je peux avoir un mesh diffrent pour les vues FPS et troisime personne ?
Absolument ! Dans UT3, c'est mme le cas pour toutes les armes. Pour crer cette classe, rien de plus facile, c'est exactement le mme principe que pour votre arme elle-mme. Crez un nouveau fichier W_BurnerRifle_AT.uc : Code : Java class W_BurnerRifle_AT extends UTWeaponAttachment; defaultproperties { Begin Object Name=SkeletalMeshComponent0 SkeletalMesh=SkeletalMesh'W_BurnerRifle.Mesh.SK_BurnerRifle'
www.siteduzero.com
162/235
V ous devriez tre tonn par une des lignes, qui introduit une rotation du model 3D. Pour deux raisons : pourquoi effectuer une rotation alors qu'on utilise le mme model 3D que dans l'arme elle-mme, qui n'a aucune rotation ? pourquoi 16384 ? Les rponses sont complexes et sont lies la faon dont UTWeaponAttachment a t cr. Sachez simplement que 16384 correspond ici une rotation de 90 sur le model en vue la troisime personne, et que vous aurez une arme mal place si vous lomettez. Pour la connecter votre arme, c'est toujours aussi simple, il vous suffit d'une ligne dans W_BurnerRifle.uc : Code : Java AttachmentClass=class'zGame.W_BurnerRifle_AT'
Et voil le travail ! V ous avez maintenant un mesh visible en vue la troisime personne.
www.siteduzero.com
163/235
Maintenant, nous allons devoir faire deux choses : grer les vnements lis aux tirs afficher le faisceau entre le canon et la cible.
Le faisceau lumineux
On commence par le faisceau. Pour ce faire, crivons une fonction ! Elle prendra trois paramtres : le point de dpart du faisceau, et le point d'arrive Code : Java simulated function SpawnBeam(vector Start, vector End) { local ParticleSystemComponent E; E = WorldInfo.MyEmitterPool.SpawnEmitter(BeamTemplate, Start); E.SetVectorParameter('BeamEnd', End); E.SetDepthPriorityGroup(SDPG_World);
Bien sr, vous ne pouviez pas inventer cette fonction, mais il est important de bien la comprendre. Le code se droule en trois tapes : on cre un systme de particules, notre ParticleSystem BeamTemplate, dont le dbut (Start) devra tre plac sur le canon ; on rgle un paramtre du ParticleSystem, BeamEnd. Tout comme les matriaux, les ParticleSystem aussi sont paramtrables et vous noterez que j'utilise la mme fonction que pour configurer le MaterialInstanceConstant de notre zCrate; enfin, on rgle la priorit d'affichage du faisceau, ne vous en souciez pas trop.
Les vnements
Nous n'avons plus qu' dclencher les vnements de tir ! L encore, difficile pour vous d'inventer... Code : Java simulated function FirstPersonFireEffects(Weapon PawnWeapon, vector HitLocation) { Super.FirstPersonFireEffects(PawnWeapon, HitLocation); if (Instigator.FiringMode == 0) SpawnBeam(UTWeapon(PawnWeapon).GetEffectLocation(), HitLocation); } simulated function ThirdPersonFireEffects(vector HitLocation) { Super.ThirdPersonFireEffects(HitLocation); if (Instigator.FiringMode == 0) SpawnBeam(GetEffectLocation(), HitLocation); }
Ce code est trs simple, il suffit de savoir que ces deux fonctions sont appeles pour afficher les effets spciaux des tirs. Dans les deux cas, c'est quasiment le mme code, la seule difficult est de connatre le point de dpart du tir, avec la fonction GetEffectLocation. Pour que tout a fonctionne, il va vous falloir revenir une dernire fois dans W_BurnerRiflepour ajouter une ligne aux defaultproperties : Code : Java
www.siteduzero.com
164/235
Cette ligne rgle le socket MuzzleFlashSocket comme rsultat renvoyer par la fonction GetEffectLocation. Cette fonction, qui est employe pour dterminer le point de dpart du faisceau, vous permet de faire dmarrer le faisceau depuis n'importe quel endroit. L'attribut EffectSockets peut aussi tre employ pour des effets plus classiques, videmment, comme la flamme qui s'chappe du canon d'une arme classique.
Le rsultat final !
www.siteduzero.com
165/235
Le rsultat ! Cette fois-ci, a y est... V otre arme est prte dvaster Internet (ou pas) ! Au terme de cette partie, vous avez ralis une arme basique : elle ne comporte aucune animation (rechargement, tir...) ni de mode de tir complexe. L'objectif est uniquement de vous prsenter le mcanisme des armes et de vous encourager poursuivre vos recherches !
www.siteduzero.com
166/235
Un peu de thorie
Maintenant que vous matrisez les principaux mcanismes d'UnrealScript, il est temps de passer aux choses srieuses. Ce chapitre sera moins amusant que les prcdents, mais c'est galement un des plus importants : il va vous enseigner les principes de base de la programmation dans UDK.
Variables et encapsulation
Comme en C ou en Java, il faut dclarer les variables avant de s'en servir. La dclaration est l'occasion d'indiquer plusieurs informations : le nom bien sr, mais aussi le type, la visibilit et, c'est forcment nouveau pour vous : le groupe. Allons-y progressivement...
Type et visibilit
Sur le plan du typage, que nous allons voir en dtail dans la suite, rien de bien surprenant : chaque variable a un type (entier, chane de caractre...) qui dfinit quelles donnes seront stockes, et un nom. En Unrealscript, une variable se dfinit avec le mot clef var. Code : Java var int foobar;
On dfinit ainsi une variable foobar qui stockera des entiers. C'est maintenant que votre exprience du C++ ou du Java va vous servir : vous devriez connatre le principe d'encapsulation, ou visibilit des variables. En clair : une variable dans UnrealScript peut tre prive (non modifiable depuis le code d'une autre classe) ou publique (dans ce cas, n'importe quelle classe peut accder et modifier cette variable, ce qui n'est pas recommand en temps normal). La dclaration prcdente concernait une variable prive. V oici ds maintenant une variable publique ! Code : Java var() int foobar;
Eh oui... Ces deux petites parenthses ont une incidence trs importante ! Au sujet des variables publiques : un objet plac dans une map peut voir ses proprits publiques dites ... Dans le menu Proprits (F4) de l'objet en question, avec Unreal Editor ! Quand vous manipulez un objet et que vous modifiez ses proprits, c'est une variable publique que vous accdez sans le savoir. Un dernier point : vous connaissez probablement le mot-clef protected qui souvent, en programmation oriente objet, indique que la variable peut tre modifie dans une sous-classe de celle sur laquelle vous travailler. C'est un compromis entre public et priv, en quelque sorte. Bonne nouvelle : il existe aussi.
Les groupes
Si vous avez un peu manipul Unreal Editor, vous avez probablement remarqu que les proprits publiques de chaque objet sont minutieusement classes dans diffrents groupes . C'est extrmement facile raliser, il suffit d'indiquer le nom du groupe entre parenthses : Code : Java var(MonGroupe) int foobar;
www.siteduzero.com
167/235
Variables locales
Enfin, il est bon de le savoir : par dfaut en Unrealscript, toutes les variables sont prives et globales votre classe. Dans une fonction, vous pouvez indiquer qu'une variable est locale, et je vous y encourage : ainsi vous tes certains de ne pas la modifier depuis l'extrieur. Code : Java local int foobar;
Si vous ne savez pas (ou plus) de quoi il s'agit, ou que vous ne voyez pas le problme, prenons un exemple. Code : Java class Player extends Actor; function bool Test () { return IsA('Actor'); }
www.siteduzero.com
168/235
La fonction Test renverra systmatiquement true ! En effet, un objet instanci partir de cette classe, au sens objet, est un Player, mais c'est aussi un Actor. Si vous avez bien compris le principe d'hritage, ce paragraphe encore une fois ne devrait gure vous tonner.
Les fonctions
V ous avez dj ralis des fonctions dans les chapitres prcdents, mais c'est l'occasion de formaliser leur dfinition. V oici un exemple de fonction typique : Code : Java function int foobar (bool foo) { if (foo) return 42; else return 21; }
Comme vous vous en doutez, cette fonction prend en paramtre une variable (locale) foo, et renvoie un entier. Une fois ce point rappel, voyons quels mot-clefs peuvent venir agrmenter cette fonctionn en s'ajoutant au tout dbut de sa dclaration, avant function: static: si vous connaissez ce mot-clef en C++, soyez rassur : c'est le mme. Le mot-clef static indique que la mthode peut tre appele directement sans instancier la classe concerne. private, protected: ces mot-clefs fonctionnent de la mme faon que pour les variables. simulated: permet au moteur d'optimiser la gestion du rseau en l'excutant uniquement ct client dans un jeu multijoueurs. server: c'est un peu le contraire, cette option force l'excution ct serveur reliable: force l'envoi sur le rseau via un protocole fiable, et son contraire, unreliable, si la fonction n'est pas critique. final: interdit la redfinition dans une classe fille. Quelques exemples pour conclure, et pour vous mettre l'aise avec cette syntaxe... Code : Java server reliable function bool SendPosition (int foobar){} simulated function MovePawn (bool foobar){} final function ScoreKill (int foobar){}
Pour plus d'informations sur les fonctions, c'est par ici que a se passe !
Classes et hritage
Il est temps de s'attarder sur le point le plus central du langage : les classes. Les mcanismes orients objet d'Unrealscript sont simples et trs classiques, vous ne devriez pas tre trs surpris en les lisant. Le principal intrt de ce chapitre est de vous signaler les mot-clefs propres au langage qui vous aideront concevoir un jeu vido.
Dfinition, hritage
La dfinition d'une classe, en Unrealscript, ne se fait jamais partir de zro. Toute classe hrite (indirectement) d'une classe mre qui est la classe Object : programmeurs, vous tes en terrain connu. V ous avez dj appris dans le cours comment dclarer une classe, faisons une piqure de rappel. Code : Java class MyClass extends Object;
www.siteduzero.com
169/235
Nous verrons dans ce chapitre d'autres classes courantes : Actor, Pawn... V ous pouvez bien videmment dclarer votre classe sur le modle d'une de celles que vous avez dfinies ! A titre d'information, c'est la classe Actor qui est au centre du monde dans UDK : la plupart de vos objets intelligents en hriteront, plutt que d'Object.
V otre organisation va compltement en dcouler. Soyons clairs sur le rle d'UTGame et UTGameContent : c'est une dmonstration du moteur, sous la forme d'une partie du jeu Unreal Tournament 3. Vous n'tes pas censs modifier ce code, et vrai dire, mieux vaut ne pas y recourir. Pour plusieurs raisons, la principale tant sa grande complexit.
www.siteduzero.com
170/235
En revanche, je vous recommande de suivre cet exemple dans sa structure. UTGame est bas sur UDKGame, qui est plus gnrique : faites de mme, utilisez les classes du package UDKGame. Et comme pour UT3, dcoupez votre programme en deux sections : les classes les plus complexes, abstraites dans la partie basse (comme UTGame) et les problmatiques de contenu, d'affichage, de gameplay dans une couche qui hrite d'UTGame (comme UTGameContent).
Ce diagramme devrait vous aider mieux vous reprer dans les packages. N'hsitez en revanche surtout pas fouiller le code des couches infrieures : si tout est disponible, ce n'est pas pour rien ! Mais vous ne devriez pas avoir besoin de beaucoup regarder le code en dehors d'UTGame. Si on peut faire un FPS haut de gamme ce niveau d'abstraction, inutile de descendre beaucoup plus bas.
Quelques explications
Le terme basique est peut-tre mal choisi : ce jeu est dj assez complet, en ralit. Il correspond un jeu dans lequel vous vous promenez avec un personnage vous, dans un jeu de votre conception, avec votre propre interface graphique, vos rgles de jeu... En clair, un vrai jeu vido qui en apparence n'a plus rien voir avec Unreal Tournament. C'est normal : ici, on ne s'en est pas du tout servi ! Faisons un tour rapide des principales classes employes. Actor: un Actor est un objet intelligent gnrique. La plupart des classes en hritent, vous souvenez-vous de la zCrate ?
www.siteduzero.com
171/235
UDKPawn: le Pawn est, pour faire simple, un personnage. UDKPlayerController: les Controller sont des entits d'intelligence, associs aux Pawn. Comme son nom l'indique, le <gras>PlayerController </minicode>est une variante spcifique conue pour les joueurs humain. UDKGame: cet objet dfinit les rgles de jeu, le Pawn par dfaut, etc. UDKHUD: le HUD, ou Heads-Up Display, c'est cet affichage 2D que vous avez sur l'cran dans la plupart des jeux. Barre de sant, viseur, munitions restantes, informations sur un objet, tout ce qui n'est pas de la 3D est souvent dans le HUD ! GFX_* : ces classes sont bases sur Scaleform et grent la partie multimdia du HUD ainsi que des menus du jeu. Nous y reviendrons en dtail dans une partie complte ! Encore une fois, faites l'effort de chercher ces lments dans les fichiers d'UDK. V ous pouvez trouver des informations trs compltes rien qu'en tudiant ce que les auteurs en font dans UTGame !
Les vhicules
Architecture du code
Il existe un mcanisme trs complexe de vhicules dans UDK. Vhicules volants, terrestres roulants ou non, avec des modles physiques parfois trs tudis. Sur cet aspect, le code d'UTGame est trs bien fourni, puisqu'il comporte un vhicule de chaque type : volant (UTVehicle_Cicada.uc) ; sur coussin d'air (UTVehicle_Manta.uc) ; et roulant (UTVehicle_Scorpion.uc) ! V ous pouvez trouver le comportement des vhicules dans toutes les couches cites plus haut : du code natif (Vehicle.uc, SVehicle.uc), jusqu'au code d'UT3 (UTVehicle.uc), en passant bien sr par la couche UDK (UDKVehicle.uc). Comme vous le voyez, c'est un sujet complexe. N'ayez pas peur de vous lancer pour autant : tout est possible et les exemples sont nombreux et documents. Une fois cet aspect de programmation bien matris, il vous faudra travailler le contenu. Un vhicule, dans UDK, ncessite un certain nombre de ressources audiovisuelles. Je vous propose donc ici un processus de travail pour construire un vhicule, qui vous rappellera probablement le chapitre sur les SkeletalMesh ! 1. La premire tape est de raliser votre SkeletalMesh, le Material associ, les sons, avec vos outils favoris. Nul besoin d'UDK dans cette phase : dans votre projet, une personne ddie qui n'utilise pas du tout UDK peut remplir ce rle ! 2. Ensuite, le processus d'import se droule comme indiqu dans la partie 3 de ce cours. V ous allez construire, peu peu, un SkeletalMesh, ses animations, son modle physique, son Material jusqu' avoir un ensemble complet. 3. Une fois ces prparatifs termins, inspirez-vous de l'existant pour construire le code d'un vhicule partir d'UDKVehicle, avant de le rgler en dtail pour avoir le meilleur comportement possible ! Ce processus est exactement le mme pour un personnage !
www.siteduzero.com
172/235
La bonne nouvelle, c'est que cette fois-ci, c'est extrmement simple et rapide. Il vous suffit de lancer le jeu dans l'diteur, d'ouvrir la console avec TAB, et d'une commande ! Code : Console editactor class=ClasseAEditer
Un exemple en jeu avec un vhicule ! Une fois la commande entre, vous accdez aux proprits courantes de l'objet via la fentre de proprits laquelle vous tes habitus. Pour aller plus loin, comme toujours, voici la documentation UDN sur le dbogage directement dans le jeu. Au terme de cette partie, vous vous posez probablement des milliers de questions. La plupart trouverons leurs rponses dans la documentation, ou directement dans le code fourni avec UDK. Si ce n'est pas le cas, le forum Mapping & Modding vous accueille pour y rpondre ! Ce chapitre est complexe et trs important : n'hsitez pas le relire pour bien comprendre les points voqus. La suite du cours sera moins thorique, mais il tait ncessaire de s'y arrter. Si vous tes prts lire la suite, celle-ci concerne l'interaction avec le joueur : souris, clavier, cran !
www.siteduzero.com
173/235
Configurer le jeu avec les fichiers INI Configurez votre jeu avec des fichiers texte
V ous avez probablement remarqu que dans le dossier UDKGame/Config , se trouvent un grand nombre de fichiers l'extension .ini. Ce sont des fichiers de configuration qui permettent de modifier facilement le comportement du jeu, sans exiger une compilation complte. C'est galement trs pratique pour des mises jour. Ce comportement est entirement gr par UDK, et facile employer au moyen d'un Specifier associ la classe : Config. Code : Java class MyPawn extends UDKPawn Config (Pawn);
Le fichier associ, c'est vous de le crer suivant la syntaxe habituelle des fichiers INI, trs simple utiliser. Son nom n'est en revanche pas du tout choisi au hasard ! C'est UDK , suivi du nom que vous choisissez dans le Specifier (ici, "MyPawn"). Ici, votre fichier s'appellerait donc UDKPawn.ini. Si vous n'tes pas trop perdus, voyons un exemple concret d'utilisation de ces fichiers. Code : Java class MyPawn extends UDKPawn Config (Pawn); // Utilisera UDKPawn.ini var int ConfIntTest; var string Description;
On cre ici une variable nomme ConfIntTest et une autre nomme Description, dans la classe MyPawn. On admettra que cette classe est dfinie dans le package zGame, c'est--dire que vous avez crit son code dans Src\zGame\Classes\MyPawn.uc. V oici maintenant un fichier de configuration qui configure ses proprits, qui comme indiqu cidessus se nomme UDKPawn.ini ! Code : Ini ; Cette ligne est un commentaire. La syntaxe des fichiers INI est trs simple : [zGame.MyPawn] ConfIntTest=42 Description="Mon jeu est passionnant"
V ous pouvez configurer plusieurs classes dans le fichier, en indiquant chaque fois le nom de celle-ci entre crochets [ ], suivi des proprits. Pour sauvegarder l'tat actuel de l'objet par la suite, de faon permanente, il suffit de faire appel la mthode <minicode>SaveConfig</graminicodes> qui crira le fichier sur votre disque dur. Pour des explications plus compltes sur le comportement de ces fichiers de configuration, vous devrez vous rfrez la documentation UDN ddie.
www.siteduzero.com
174/235
Ct code, nous ferons simplement appel la classe UDKPlayerInput. V oyons un exemple de classe hritant PlayerController : Code : Java defaultproperties { InputClass=class'UDKPlayerInput' }
La fonction que vous souhaitez appeler doit galement tre dclare dans ce PlayerController !
Mise en pratique
Nous allons raliser un exemple utile : un bouton d'action pour activer des objets. Nous allons faire simple en remployant la zCrate, mais vous pourrez largir le principe tout ce que vous voulez, et nous verrons dans la prochaine partie du cours comment associer ce mcanisme un menu graphique.
www.siteduzero.com
175/235
A partir de maintenant, cette map lancera le mode de jeu zGame. C'est l'occasion de dcouvrir, dans ce dernier chapitre, le rle de UDKPlayerController. Cette classe est essentielle, mais son usage ne va arriver que peu peu. C'est en tout cas le cas aujourd'hui : nous allons avoir besoin de la grer. Pour rsumer, elle permet de connecter tous les aspects de gameplay d'Unrealscript : joueurs, interface, niveaux... De mme, la classe UDKHUD gre l'interface l'cran. Nous y reviendrons !
Cette partie, cest vous de l'crire. V ous avez toutes les informations en mains, vous venez de voir comment dtecter les touches, vous avez un code de base qui dtecte le type des objets et l'affiche. Il vous suffit de grer la touche de votre choix, de dtecter l'objet vis de la classe zCrate et la faire clignoter. Faisons un plan de travail : modifiez zCratepour crer une mthode changeant la couleur, pouvant tre appele depuis l'extrieur ; crez une classe zPlayerControllerpour grer la touche et le changement de couleur ; modifiez zHUD pour signaler votre zPlayerController la dtection d'une caisse. La mthode UpdateCrateStatusvous est laisse crire ; vous disposez dj de la classe zGame, rien faire de ce ct. Au travail ! La correction suit, prenez le temps de la comprendre si vous n'avez pas russi vous-mmes ! C'est trs important pour la suite de comprendre ces principes. Rappelez-vous que nous allons mettre ce TP profit pour une extension plus tard. Secret (cliquez pour afficher) Code : Java class zPlayerController extends UDKPlayerController;
www.siteduzero.com
176/235
Code : Java // dans zHUD.uc simulated function UpdateCrateStatus(Actor detectedActor, zPlayerController pCtrl) { if (detectedActor != None) { // Caisse entre dans le champ de vision pCtrl.setCrate(zCrate(detectedActor)); } else { // Caisse sortie du champ de vision pCtrl.setCrate(None); } }
Code : Java // dans zCrate.uc simulated function DisplayHit() { MaterialInstance.SetVectorParameterValue('LightColor', HitLightColor); SetTimer(0.5,false,'ResetLight'); }
Le code n'appelle que trs peu aux commentaires. J'ai choisi de nommer ma mthode de changement de couleur DisplayHit :
www.siteduzero.com
177/235
Cette partie s'achve avec ce TP. La suite du cours va s'axer sur la ralisation d'une interface graphique complte, nous allons y mettre profit tout ce que vous avez appris ici et dcouvrir de nouveaux mcanismes pour raliser un jeu vido de qualit ! Prenez le temps de vous intresser aux pages de documentation proposes dans le cours, cherchez sur Internet si vous avez une question ou si vous voulez raliser un point prcis. Tous les points ne sont pas abords et le cours reste trs succinct sur chaque concept, c'est vous d'aller plus loin l'aide de la documentation et des exemples. Rendez-vous sur le forum Mapping & Modding pour partager vos ides, vos travaux ou dcouvrir de nouvelles techniques ! Au terme de cette partie, vous aurez toutes les informations en main pour vous lancer dans votre jeu vido.
www.siteduzero.com
178/235
Introduction
Nous allons partir de maintenant laisser de ct les aspects de gameplay pour dvelopper un point trs important : l'interface.
Ce cours n'est en aucun cas un cours sur Flash. Tout simplement car c'est hors sujet : ici, vous apprendrez utiliser Flash pour raliser une interface de jeu vido, et le cours passera volontairement assez rapidement sur les lments basiques du logiciel. A vous d'apprendre ces notions si vous ne les avez pas. Pour autant, pas de panique, Flash pour l'usage que nous allons en faire restera simple.
www.siteduzero.com
179/235
Tlchargement en cours...
www.siteduzero.com
180/235
Une fois le tlchargement termin, l'installation se fait automatiquement Le reste de l'installation est trs classique et ne vous surprendra probablement pas ! Nous pouvons passer l'tape suivante, l'installation de Scaleform. Rassurez-vous, a sera bien plus simple et plus rapide.
www.siteduzero.com
181/235
Retrouvez cette extension L'extension vous permettra de lancer directement un rendu Scaleform dans Flash, au lieu d'utiliser le Flash classique pour tester vos travaux dans l'diteur. C'est en effet un lecteur Flash spcifique que vous propose Scaleform.
L'installation a t russie ! Relancez Flash pour l'essayer. L'tape suivante est de placer le bouton de rendu Scaleform dans l'interface, en ouvrant le menu Window Other Panels - Scaleform Launcher. Un nouveau panneau apparat dans l'interface !
www.siteduzero.com
182/235
Le bouton Scaleform Il nous reste encore configurer cette extension en cliquant sur le bouton + droite de Currently No Profiles. Cliquez encore sur + droite de Player EXE et naviguez dans le mme dossier que prcdemment, cette fois-ci pour slectionner GFxMediaPlayer.exe, et cliquez sur OK pour terminer vos rglages.
www.siteduzero.com
183/235
La fentre de configuration du langage Enfin, dans le menu Source path : cliquez sur + cliquez sur l'icne reprsentant un dossier ; ajoutez le chemin UDK\Development\Flash\AS3\CLIK ; cliquez sur OK jusqu' revenir la fentre principale. Dans File - ActionScript Settings, dcochez la case Automatically declare stage instances. Vous avez termin, flicitations !
www.siteduzero.com
184/235
www.siteduzero.com
185/235
Voici les rglages effectuer : une rsolution de 1080p, et ActionScript 3.0 Et comme nous avons choisi une rsolution de folie, je vous propose de redimensionner la vue avec View Magnification - Fit in Window.
Et voil : vous tes enfin prt travailler ! Je vous laisse ajouter un simple texte en couleur pour essayer. N'oubliez pas que la taille du texte est relative : nous avons choisi du 1920x1080, mais si votre cran offre une rsolution infrieure, une mise l'chelle se fera. De mme, le texte lui suivra cette chelle : tout ce que vous faites dans Scaleform est indpendant de la rsolution relle.
www.siteduzero.com
186/235
Un texte basique pour vrifier le bon fonctionnement de Scaleform Et maintenant, pour essayer il suffit de sauvegarder votre fichier Flash dans le dossier UDK\UDKGame\Flash\zUI par exemple, puis de cliquez sur ce fameux bouton Test with : GFxMediaPlayer. Nous reviendrons au nom du dossier dans le chapitre suivant. L'usage de ce bouton, notez-le, gnre automatiquement un fichier SWF que vous connaissez probablement bien si vous avez l'habitude de Flash. On peut le voir comme un fichier compil prt tre utilis, mais non ditable. C'est ce fichier que nous importerons trs vite dans UDK. V otre premire bauche d'interface devrait s'afficher dans une nouvelle fentre !
www.siteduzero.com
187/235
Le retour de Kismet
V ous ne croyiez quand mme pas vous en tirer aussi bon compte avec Kismet ? Pas de panique, encore une fois tout sera trs simple : vous avez uniquement besoin du nodeAction - GFx UI Open GFx Movie, et d'un vnement Level Loaded que vous connaissez bien. Indiquez le chemin de votre fichier de test, et tout est prt !
Le diagramme Kismet rsultant : rien de bien compliqu... Tout est prt : il suffit de lancer la map pour voir le rsultat final...
www.siteduzero.com
188/235
Et voil votre interface en jeu ! Et voil : en quelques minutes, vous avez import un fichier Flash fonctionnel dans UDK. Il n'y a rien de plus faire ! Nous allons le dcouvrir, les fonctionnalits avances seront aussi faciles importer. Dsormais, il ne vous reste qu' apprendre les mcanismes qui vous sont fournis.
Ce pack contient galement l'interface complte prte l'emploi, en guise de rfrence. Je vous dconseille vivement de vous en servir pour suivre le cours, elle ne sert que pour vous aider comprendre. Suivre le cours en se contentant de lire n'a aucun intrt !
Le format conseill pour les images Scaleform est PNG, pour grer les transparences. Pour plus d'efficacit dans votre travail, je vous conseille galement de modifier la couleur de fond pour choisir un fond vert vif : vous percevrez plus facilement le comportement des objets transparents. Pour modifier cette couleur, cliquez sur Modify - Document.
www.siteduzero.com
189/235
Crez un nouveau fichier avec les mmes rglages que le prcdent, sauvegardez-le au mme endroit et assurez-vous d'avoir des images d'essai prtes l'emploi dans un sous-dossier. Une fois prt, cliquez sur File - Import - Import to Stage, choisissez votre image et cliquez sur Open.
C'est normal : par dfaut, Flash n'affiche que le contour des objets. Pour corriger a, cliquez sur View - Preview Mode Full.
Voil qui est mieux ! Attention, il reste encore un point crucial corriger aprs l'importation dans Flash : la compression des images. Actuellement, l'importation dans UDK ne fonctionnera pas : nous devons d'abord modifier les options de l'image. Pour ce faire, affichez d'abord le menu Libraryen cliquant sur l'onglet en question, en haut droite, puis ouvrez ses options avec clic droit - Properties. V oici les paramtres corriger : Name : supprimez l'extension de celle-ci ; Allow smoothing : coch ; Compression: Lossless.
www.siteduzero.com
190/235
Les options de l'image La prochaine partie du cours portera sur la ralisation d'un menu principal. Je vous propose donc de raliser la structure de votre menu, en vous abstenant des lments dynamiques tels que les boutons. V oici mon rsultat !
Il ne reste plus qu' scripter le mouvement de la camra, et ajouter des boutons ! Et maintenant, passons des objets plus complexes...
www.siteduzero.com
191/235
Une squence complte pour votre menu Il vous suffira donc tout simplement de changer le nom de l'objet Flash lanc dans ce niveau, et bien sr, de remplir ce niveau avec un vritable dcor !
www.siteduzero.com
192/235
vous n'avez aucune raison de manipuler directement le code (complexe) associ chaque lment, en revanche vous aurez besoin d'diter les fichiers Flash : le thme par dfaut ne vous conviendra pas ! On va voir dans la suite comment diter, ou plutt redfinir le contenu de ces objets.
Importation et redfinition
V ous vous rappelez de l'importation d'une image ? Importer un composant CLIK est aussi simple, nous allons le voir en dtail dans la suite de ce chapitre. Le principe est simple : vous allez tout simplement effectuer une copie locale, dans la bibliothque (Library) de votre fichier Flash, de l'objet en question. A partir de l, vous aurez toute latitude pour l'diter directement dans votre fichier Flash sans que ces modifications (peut-tre rates) ne dtruisent la base de contenu fournie avec Scaleform.
Sources de donnes
V ous l'aurez compris, les objets CLIK peuvent communiquer avec Unrealscript. Plus prcisment, une liste est connecte une source de donnes : nous commencerons par un test directement en ActionScript, mais terme, c'est bien Unrealscript et votre jeu qui fournira ces donnes !
Pour rsumer
V oici donc le processus de cration d'une liste Scaleform personnalise : importer l'objet lment de liste dans votre fichier ; diter cet objet directement sur votre espace de travail ; importer l'objet Liste droulante qui dpend de ce premier objet ; diter cette liste pour complter la personnalisation : les lments sont dj les bons ; via Unrealscript, remplir la liste avec les donnes voulues. V ous allez voir : c'est plus simple que vous le pensez.
www.siteduzero.com
193/235
La bibliothque des composants CLIK V ous pouvez bien videmment essayer immdiatement cette bibliothque dans le rendu de Flash. Une fois que vous avez fini de jouer avec, revenez votre fichier, mais chargez-y la bibliothque CLIK :
Nous allons travailler avec CLIK Nous allons maintenant, dans Library, employer un Button - DefaultButton. Installez-le dans votre fichier par un cliquer-glisser. Nous allons commencer par donner notre DefaultButtonun InstanceName prcis : ExitButton, pour communiquer avec UDK. Puis, cochez la proprit Enable Init Callback pour permettre au bouton de signaler son existence Unrealscript ; et enfin, remplissez le champ Label pour indiquer le texte QUITTER LE JEU .
www.siteduzero.com
194/235
Un nom d'instance pour identifier l'objet, et quelques rglages Nous allons prsent modifier notre bouton pour lui donner une apparence plus conforme notre menu. Il suffit de doublecliquer sur ce bouton pour arriver dans une interface ddie lui, dans laquelle le reste n'est plus ditable.
Prt diter ! C'est ici que vous avez besoin de connatre Flash et son mcanisme de layers , qui ne sera pas dtaill ici. V ous pouvez commencer par supprimer les layers inutiles : gardons uniquement actions et textField, notre menu est suffisamment simple pour a. Quasiment tout disparat, c'est normal : nous allons recommencer zro. Le bouton comporte quatre squences : up : c'est l'tat par dfaut du bouton ; over : le pointeur est au dessus du bouton ; down : le bouton est enfonc ; disabled : le bouton est dsactiv. Il nous faut maintenant importer le contenu de notre bouton, via File - Import - Import to Stage : lib/arrowButton.psd, dans le dossier de votre menu. V ous devriez avoir deux lments actifs : on et off. Pour chacun d'eux, utilisez les rglages suivants : create movie clip for this layer ; compression : lossless.
www.siteduzero.com
195/235
L'importation configure Avant de poursuivre, je vous conseille de dplacer les guides de l'diteur pour dlimiter votre objet, et de repasser dans l'onglet de Libraryddi votre fichier. V ous y trouverez un nouveau dossier nomm arrowButton.psd Assets qui contient les deux tats du bouton. De mme, un nouveau layer, ddi ce fichier est apparu ! La manipulation a effectuer est maintenant simple : vous devriez avoir l'image off comme contenu du bouton, laissez-l telle quelle ; dans le layer de votre bouton import, crez une nouvelle frame sur la colonne correspondant au dbut de over ; supprimez l'image de bouton de cette frame et par un cliquer-glisser depuis Library, importez l'image on. Positionnez-l bien, en vrifiant que les images se superposent grce la timeline. Au terme de cette manipulation, si vous dplacez la timeline vous devriez avoir un changement d'image au moment du passage over, et la mme image ensuite pour down et disabled.
www.siteduzero.com
196/235
Revenez la frame initiale, choisissez la police du texte dans le layer textField, la taille, une couleur blanche. Sur le mme principe, crez une nouvelle frame sur le dbut de la squence over, et modifiez-y la couleur du texte. Si vous avez bien compris la manipulation prcdente, ce devrait tre simple !
Un bouton et du texte ! Nous avons employ du texte, il va nous falloir configurer la police employe (Arial dans mon exemple). Dans l'onglet Properties avec votre texte slectionn, cliquez sur Embed. Nous allons intgrer cette police au fichier Flash : il va falloir cocher la case Character ranges : All. Rptez ce processus le jour o vous intgrez une nouvelle police ! Si vous tes familier de la cration de sites Web, vous savez peut-tre qu'employer une police rare que personne n'utilise est un cassette, il faut la faire tlcharger vos lecteurs. C'est bien plus simple avec Flash : on embarque dans le fichier la police entire, vous faites donc ce que vous voulez.
Configurez l'intgration d'une nouvelle police Revenez votre fichier avec le fil d'Ariane en haut du plan de travail (cliquez sur Scene1), dplacez votre bouton, sauvegardez et testez. V ous avez un bouton fonctionnel ! Attention, vous ne pouvez pas encore l'importer dans UDK : nous avons nglig un point important qui le rend pour l'instant inutilisable. Surtout, ne sauvegardez jamais le fichier CLIK_Components_AS3 !
www.siteduzero.com
197/235
V oici la dernire tape avant de pouvoir tester tout ce beau monde : vous devez encore crer un pointeur de souris ! Un curseur est fourni dans le pack d'interface, voici la procdure suivre pour le rendre utilisable : importez-le et configurez-le comme n'importe quelle image PNG ; slectionnez le curseur dans votre vue ; dans l'onglet Code Snippets, droulez Actions; double-cliquez sur Custom Mouse Cursor et choisissez OK.
V otre interface fonctionne et s'anime, mais le bouton n'est reli rien. V ous devez utiliser la commande quit pour fermer la fentre de jeu, aprs avoir ouvert la console avec TAB.
www.siteduzero.com
198/235
sauvegardez votre fichier Flash en tant que MainMenu.fla, et testez-le dans Flash pour exporter le SWF ; une fois ce fichier import, ouvrez Kismet dans UDKFrontEndMap.udk : dans le node Open GFx Menu indiquez MainMenu comme Movie. V ous tes prts programmer !
Nous allons donc hriter de toutes les fonctions de manipulation de Scaleform GFx , l'API Unrealscript ddie. Nous allons immdiatement faire communiquer notre bouton avec une commande console : exit . Son nom est logique et clair : c'est cette commande qui lance l'arrt du moteur. Avant d'aller plus loin, compilez ce code puis ouvrez Kismet dans UDKFrontEndMap : dans le node Open GFx Menu indiquez MainMenu comme Movie et pour l'option Movie Player Class, choisissez votre nouvelle classe GFx_ZMenu.
V ous devriez savoir immdiatement o crire ce code, si vous avez bien suivi ! Si ce n'est pas le cas, relisez la partie prcdente. Nous allons ensuite crer un vnement ddi la fermeture du niveau. Cet vnement sera ensuite connect l'appui sur le bouton.
www.siteduzero.com
199/235
La fonction ConsoleCommand, vous l'aurez devin, traite la commande comme si vous l'aviez tap dans la console.
Enfin, et c'est la dernire manipulation de ce chapitre, nous allons grer l'vnement, ou Eventen Unrealscript, envoy par le moteur quand un objet Scaleform (ou Widget, de la classe GFxObject) signale son existence. Nous traiterons diffremment l'vnement suivant l'objet en question, et nous l'associerons toujours une mthode spcifique : ici, c'est notre mthode OnExit. Prenez le temps de comprendre ce code qui est simple. L'essentiel est fait dans la mthode AddEventListener qui associe deux vnements : CLIK_click du ct Flash, et OnExit du ct UDK. Code : Java event bool WidgetInitialized (name WidgetName, name WidgetPath, GFxObject Widget) { switch(WidgetName) { case ('ExitButton') : ExitButtonMC = GFxClikWidget(Widget); ExitButtonMC.AddEventListener('CLIK_click', OnExit); break; default : return Super.WidgetInitialized(Widgetname, WidgetPath, Widget); } return true; }
V ous pouvez compiler ce code, lancer UDK Game : si tout se passe bien, votre menu fonctionne, et l'appui sur le bouton Quitter le jeu va effectivement arrter UDK. Flicitations !
www.siteduzero.com
200/235
Un texte prt tre dit depuis Unrealscript Une fois dans Unrealscript, dclarez un contrleur associ ce texte. Code : Java var GFxObject MenuTitleMC;
Maintenant, dans la mthode Start, il suffit d'ajouter quelques lignes avant de quitter la fonction : Code : Java MenuTitleMC = GetVariableObject("_root.MenuTitle"); MenuTitleMC.SetText("MENU PRINCIPAL");
Impossible de faire plus simple, et pourtant, a fonctionne merveille si vous essayez votre menu. La chane "_root.MenuTitle" peut vous surprendre, mais c'est le formalisme choisi dans Flash pour trouver un lment spcifique. Dsormais, n'crivez aucun texte en dur dans votre menu Flash : tout doit se rgler dans Unrealscript, c'est bien plus flexible et a vos rendra des services. La procdure d'importation peut vite devenir pnible et elle est plus longue qu'un simple changement de texte.
www.siteduzero.com
201/235
Un menu complet
Maintenant que votre menu fonctionne correctement, nous allons reprendre le mme principe pour crer une liste de maps.
Un lment de liste
Comme promis, nous allons rpter exactement le mme processus que pour DefaultButton mais avec un nouveau type d'objet CLIK, DefaultListItemRenderer. Comme son nom l'indique en anglais, cet objet est employ par les listes pour modliser un lment de liste, vous le trouverez dans CLIK_Components_AS3 dans la catgorie ListItemRenderer. Mais au lieu de le copier dans votre scne par un cliquer-glisser, slectionnez-le, copiez-le et revenez dans l'onglet MainMenu pour le coller. Ainsi, il est disponible dans notre Library, prt tre dit.
www.siteduzero.com
202/235
Un nouveau venu Commenons par le renommer en ZItemRenderer avec clic droit - Properties sur notre objet. Ignorez l'avertissement une fois le rglage effectu. L'objectif de cette manipulation est de diffrencier l'ancienne version l'objet et la nouvelle.
Attention, il y a deux noms changer ! Et maintenant, le plus amusant reste faire : clic droit - Edit pour reproduire exactement le mme comportement que pour le bouton ! Supprimez les layers help, help transition, overlayet itemdans l'onglet Timeline. Ce travail a dj t fait dans le chapitre prcdent ! La seule vraie diffrence, c'est qu'il y a beaucoup plus de squences que pour un simple bouton. Il y en a en fait deux fois plus, puisque la liste d'tats du bouton est double avec une seconde liste des
www.siteduzero.com
203/235
mmes tats, mais dans la version slectionne de l'item. Si, dans la liste, vous avez slectionn cet item, il rentrera dans ces squences au lieu de rentrer dans les prcdentes : trs utiles pour diffrencier celui-ci dans la liste ! V ous tes libres de choisir votre comportement. V oici une description de ce que vous pouvez faire : flche simple (off), texte blanc pour up , disabled et selected_disabled ; flche simple (off), texte blanc et objets dcals de 10 pixels pour over ; flche double (on), texte bleu pour down , selected_up et selected_down ; flche double (on), texte bleu et objets dcals de 10 pixels pour selected_over. Nous allons remployer le mme contenu visuel que pour le bouton, il n'y a donc pas besoin de faire Import to Stage : crez simplement un layer buttondans la Timeline, et faites clisser les MovieClip on ou offdepuis la bibliothque. ditez galement le layer textField pour obtenir le mme style que dans le chapitre prcdent. C'est une tche assez longue, un peu rptitive. Si vous n'avez pas l'habitude de Flash, c'est un peu difficile galement. La solution est d'abuser de Copy Frame / Paste Frame et de bien comprendre le fonctionnement des layers.
Et voil le travail ! Je vous propose d'afficher la rgle (View - Rulers) et de dplacer les lignes pointilles qui indiquent les limites de l'objet, pour dterminer les dimensions de votre item. 600 pixels de large, 100 pixels de haut. Nous avons maintenant un lment de liste utilisable !
www.siteduzero.com
204/235
Votre liste prte au travail Nous allons modifier la liste, pour des raisons purement visuelles. Rassurez-vous, cette fois-ci a sera trs simple. Il n'y a que 3 squences : default, focusedet disabled, et on ne va en faire qu'une seule grande pour tous ces tats. Pire encore, on va se contenter de retoucher le layer bg ! Cette liste n'a en effet que deux dfauts : elle est bien trop petite ; nous ne voulons pas de ce fond uni qui casse toute la transparence ; nous voulons dcorer un peu. Je vous propose de redimensionner le fond pour avoir 600 pixels de large, et 500 pixels de haut, ce qui permet d'avoir 5 lments de liste affichs. Utilisez les rgles, et dplacez les pointills pour indiquer le cadre.
En effet ! Mais nous avons quand mme besoin que la liste soit manipulable dans votre interface Flash, et pour a, il faut au moins une forme pour que Flash dtecte les contours. Flash ne tient pas compte des ListItemRendererpour a ! On va en revanche bien masquer cette forme en ditant l'option Fillde celle-ci pour y mettre un Alpha de 0%. La forme est encore-l, comme vous le savez vous pouvez la slectionner, l'diter, lui remettre un alpha de 30% ou 100%. Mais l, on ne la voit plus tout en gardant son intrt.
www.siteduzero.com
205/235
Un tour de magie : une fois l'alpha 0%, cliquez ailleurs que sur la forme pour qu'elle disparaisse... Si maintenant vous testez, une bonne et une mauvaise surprise vous attend. La bonne, c'est que la liste fonctionne (sans animation), la mauvaise, c'est que les lments sont colls les uns aux autres et tirs !
Aie aie aie... La solution, c'est de forcer Flash respecter les dimensions, en crant une forme avec 0% d'alpha dans votre ZItemRenderer avec le Rectangle Tool du menu latral.. Une fois cette manipulation effectue, tout revient la normale ! Une dernire tape reste effectuer : nous allons ajouter un bouton pour lancer la partie. Nous lui donnerons l'InstanceName suivant : LaunchMap.
www.siteduzero.com
206/235
DataProvider est une classe de CLIK, encore une fois. Cette classe modlise une source de donnes, un concept qu'il sera trs facile de connecter UDK. Pour l'employer, ajoutez galement cette ligne, au dbut du fichier cette fois : Code : Actionscript import scaleform.clik.data.DataProvider;
Cette fois c'est la bonne ! V ous pouvez tester dans Scaleform, puis importer le menu dans UDK et tester pour de bon.
www.siteduzero.com
207/235
Nous y voil enfin ! Dans mon exemple, ma liste tait un peu trop haute et vous avez srement remarqu qu'un lment vide se retrouve la fin ! N'oubliez pas , avant de passer la suite, de supprimer ce code de test ActionScript. Nous allons remplir la liste directement depuis UDK.
Dmarrage
La premire tape est de dclarer toutes les ressources utiles, et bien sr, de grer l'vnement d'initialisation. Ce code est exactement semblable celui du bouton, aux noms des variables prs. Inutile de revenir dessus, vous de comprendre comment l'intgrer. Code : Java var GFxClikWidget MapListMC; var GFxClikWidget LaunchButtonMC;
Code : Java case ('MapList'): MapListMC = GFxClikWidget(Widget); MapListMC.AddEventListener('CLIK_itemPress', OnListItemClick); MapListMC.SetFloat("selectedIndex", 0); break; case ('LaunchMap') : LaunchButtonMC= GFxClikWidget(Widget); LaunchButtonMC.AddEventListener('CLIK_click', OpenMap); break;
Petite nouveaut, on dmarre un mcanisme de slection d'index : c'est ce qui servira identifier les maps dans la liste. Code : Java WidgetBindings(1)={(WidgetName="MapList",WidgetClass=class'GFxClikWidget')} WidgetBindings(2)={(WidgetName="LaunchMap",WidgetClass=class'GFxClikWidget')}
www.siteduzero.com
208/235
Nous venons d'employer une mthode, OnListItemClick qui sera appele ds que vous cliquerez sur un des lments de la liste. Nous allons le grer un peu plus tard, pour l'instant l'essentiel est de fournir notre liste Flash des donnes correctes.
Le DataProvider en dtail
Nous allons tablir une liste des maps disponibles. Plus prcisment, cette liste va exister sous deux formats : un tableau classique qui stockera les maps ; un tableau ddi Scaleform qui sera communiqu votre menu Flash. Nous devons avant tout russir rcuprer la liste des maps UDK. Ce n'est pas spcialement une difficult si on sait s'y prendre : il y a bien sr du code disponible pour a ! Nous allons crer une mthode UpdateListDataProvider charge de rcuprer cette liste et de l'envoyer Scaleform. V ous pouvez commencer par l'appeler dans WidgetInitialized, la fin de la gestion de MapList. Passons ds maintenant son code. Code : Java function UpdateListDataProvider() { local byte i; local GFxObject DataProvider; local GFxObject TempObj; local array<UDKUIResourceDataProvider> ProviderList;
Ce n'est que le dbut de la mthode. Il est trs important de comprendre ce qui se passe ici, attention, c'est compliqu. Nous faisons appel la mthode GetAllResourceDataProviders de la classe UDKUIDataStore_MenuItems, pour stocker dans ProviderList la liste de tous les DataProviders de la classe UDKUIDataProvider_MapInfo. Une explication s'impose... UDKUIDataProvider_MapInfo modlise les informations d'une map dans UDK. Ces informations se limitent, essentiellement, au nom de celle-ci, mais dans Unreal Tournament 3 par exemple, on peut y trouver une image reprsentant le niveau. A vous de fouiller les codes existants si vous souhaitez implmenter une telle fonctionnalit. UDKUIDataStore_MenuItems est un peu comme un carnet d'adresse : nous y stockons la liste de tous les fournisseurs qui peuvent nous proposer des donnes sur des maps. Difficile d'expliquer simplement pourquoi il y en aurait plusieurs, ce qui est important c'est que ce carnet d'adresse gant remplit efficacement DataProvider. DataProvider, lui, c'est donc tout simplement la liste des maps ! Le code source d'UDK peut se rvler, sur ce type d'aspect, extrmement vaste, complexe et comme ici, trs difficile cerner. Ne vous en faites pas, la suite est bien plus simple. V oici ce que nous allons faire : parcourir la liste des maps trouves ; pour chaque map, crer un objet temporaire pour Scaleform ; pour chaque map, ajouter l'objet temporaire au DataProvider ; enfin, nous allons lier le dataProvider l'objet Scaleform ! V oici le code a rajouter dans notre mthode. Code : Java DataProvider = MapListMC.GetObject("dataProvider"); for (i = 0; i < MapList.Length; i++)
www.siteduzero.com
209/235
Au final...
Enfin, il faut commander UDK le changement de niveau. Comme pour la fermeture, nous allons employer une commande console, dans la mthode OnListItemClick que nous avons dclar tout l'heure. Cette mthode enregistre simplement l'identifiant de la map slectionne, et c'est le bouton de lancement qui va dmarrer la partie en rcuprant cet identifiant. Code : Java function OnListItemClick(GFxClikWidget.EventData ev) { MapListMC.SetFloat("selectedIndex", ev.index); } function OpenMap(GFxClikWidget.EventData evtd) { ConsoleCommand("open " $ (MapList[MapListMC.GetFloat("selectedIndex")]).MapName); }
V ous pouvez enfin lancer UDKGame et admirer votre nouveau menu. Les maps sont bien listes dans celui-ci, et vous pouvez lancer une map en cliquant sur son nom.
Mon menu complet, avec un niveau labor en arrire-plan V oici le code final de GFx_zMenu.uc. Code : Java class GFx_ZMenu extends GFxMoviePlayer; var var var var GFxObject MenuTitleMC; GFxClikWidget ExitButtonMC; GFxClikWidget LaunchButtonMC; GFxClikWidget MapListMC;
www.siteduzero.com
210/235
event bool WidgetInitialized (name WidgetName, name WidgetPath, GFxObject Widget) { switch(WidgetName) { case ('MapList'): MapListMC = GFxClikWidget(Widget); UpdateListDataProvider(); MapListMC.AddEventListener('CLIK_itemClick', OnListItemClick); break; case ('ExitButton') : ExitButtonMC = GFxClikWidget(Widget); ExitButtonMC.AddEventListener('CLIK_click', OnExit); break; case ('LaunchMap') : LaunchButtonMC = GFxClikWidget(Widget); LaunchButtonMC.AddEventListener('CLIK_click', OpenMap); break; default: return Super.WidgetInitialized(Widgetname, WidgetPath, Widget); } return true;
function OnListItemClick(GFxClikWidget.EventData ev) { MapListMC.SetFloat("selectedIndex", ev.index); } function OpenMap(GFxClikWidget.EventData evtd) { ConsoleCommand("open " $ (MapList[MapListMC.GetFloat("selectedIndex")]).MapName); } function OnExit(GFxClikWidget.EventData evtd) { ConsoleCommand("exit"); } function UpdateListDataProvider() { local byte i; local GFxObject DataProvider; local GFxObject TempObj; local array<UDKUIResourceDataProvider> ProviderList;
www.siteduzero.com
211/235
Et voil : vous disposez d'un menu principal compltement fonctionnel pour votre jeu vido ! N'hsitez pas l'diter en dtail, ajouter des fonctionnalits, des rglages, des animations... C'est a qu'il sert.
www.siteduzero.com
212/235
Le HUD Introduction
Le HUD ou Heads-Up Display , c'est cette portion spcifique d'interface qui est prsente en permanence dans le jeu. Souvent rassemble dans les coins de l'cran et typiquement en bas, on y retrouve typiquement ces lments : l'tat de la partie : objectifs, sant du personnage et munitions dans un FPS, tat des units dans un jeu de stratgie ; pointeur ou viseur ; messages entres joueurs ; menus.. Nous allons raliser un HUD de FPS minimaliste en affichant un viseur et une barre de vie. A vous, comme toujours, d'aller plus loin ! Dans UDK, le HUD est divis en deux sections distinctes, deux classes : la partie strictement Unrealscript, ddie s'intgrer directement au code de votre jeu, qui hrite de UDKHUD ; la partie ddie Scaleform, qui hrite de GFxMoviePlayer, commande par la premire classe et instancie dans celle-ci. V ous disposez dj de la premire : c'est notre fichier zHUD.uc. La seconde arrive !
Le fichier Flash
La premire chose faire est le viseur. Placez-le bien au centre de votre fichier l'aide des rgles : il ne faudrait pas qu'il se retrouve de travers, ce qui handicaperait les joueurs. Une fois cette formalit accomplie, passons aux choses srieuses avec une barre de vie. L'objet qui vous intresse est DefaultStatusIndicator dans CLIK_Components_AS3 . ditons-le : c'est un nouveau type d'objet, au comportement plus prcis que les autres puisqu'il affiche une valeur de 0 100 sous forme de barre. Dans ce mcanisme, la sant un instant prcis sera modlise par une frame. Nous allons donc crer une animation, de la frame 0 la frame 100, correspondant l'tat de la barre de vie : nous manipulerons uniquement l'animation frame par frame depuis Unrealscript. Avec un tel systme, vous pouvez par exemple avoir une barre de vie de couleur variable ! Comme d'habitude, supprimez les lments par dfaut et reconstruisez votre fichier Flash sur le mme modle. V oici le processus : effacer les layers autres que actions; via File - Import to Stage, amener du contenu dans l'objet ; transformer la ligne bleue en Symbol (clic droit< - Convert to Symbol) dans la fentre ; sur la frame initiale dans le layer de la ligne bleue, clic droit - Create Motion Tween ; Slectionnez la frame 100 du mme layer et appuyez sur F6, vous pouvez maintenant redimensionner l'image de la frame 1 pour obtenir une barre trs rduite.
www.siteduzero.com
213/235
Le rsultat final : une barre de vie utilisable. N'oubliez pas la procdure habituelle avec un Instance Name correct, et importez votre SWF dans UDK.
La suite ne va gure vous surprendre, on revient aux bases du code du menu principal. Code : Java // Dans GFx_zHUD.uc function bool Start(optional bool StartPaused = false) { super.Start(); Advance(0); return true; }
On passe maintenant, avant tout defaultproperties pour terminer le squelette de notre fichier. Code : Java // Dans GFx_zHUD.uc defaultproperties { bDisplayWithHudOff=true bAllowInput=true bAllowFocus=true MovieInfo=SwfMovie'zUI.HUD' }
Ici encore tout est trs facile, rien de vraiment nouveau pour l'instant. La vraie nouveaut, c'est qu'il nous faut associer le HUD notre code, et on ne peut pas du tout procder comme pour le menu principal ! Il faut donc une nouvelle solution : nous allons tout simplement lancer notre GFxMoviePlayer depuis la classe zHUD de la partie prcdente ! Code : Java // Dans zHUD.uc
www.siteduzero.com
214/235
simulated function PostBeginPlay() { super.PostBeginPlay(); HudMovie = new class'GFx_zHUD'; HudMovie.SetTimingMode(TM_Real); HudMovie.Init(class'Engine'.static.GetEngine().GamePlayers[HudMovie.LocalPlayerOwnerI ; HudMovie.Start(); HudMovie.Advance(0); }
Ce code est une volution importante, car nous allons par la suite devoir relier HUD, PlayerController et Scaleform. C'est le problme du HUD : il est trs fortement intgr au gameplay, et donc proche du reste du code alors que le menu principal n'est qu'une interface spare. V ous pouvez maintenant sauvegarder, compiler et essayer votre code.
En dtail
L'tape suivante, vous en doutez est de relier le code Unrealscript de votre jeu vido ce HUD que nous venons de crer. Pour ce faire, nous allons reprendre les mmes principes que pour les objets prcdents : les objets dynamiques sont rcuprs au dmarrage de l'interface ; chaque vnement pertinent dans Unrealscript, l'interface est mise jour via les rfrences des objets ; les lments visuels d'interfaces sont dirigs par les lments Actionscript qui y sont relis.
Premire tape donc, la connexion. V ous vous rappelez du texte de titre du menu principal ? Reprenons le mme code. Code : Java // Dans GFx_zHUD.uc var GFxObject HealthMC; // Dans la mthode Start() HealthMC = GetVariableObject("_root.Health");
www.siteduzero.com
215/235
Pour manipuler cet objet, c'est encore plus simple. Si vous avez bien suivi la mise en place du fichier Flash, vous avez sans doute compris que nous y avons mis en place une animation des frames 0 100, il suffit donc de se placer la frame correspondant la sant du personnage, ramene 100. Et a, c'est trs facile avec Scaleform ! Code : Java // Dans GFx_zHUD.uc simulated function UpdateHealth(int amount) { HealthMC.GotoAndStopI(amount); }
Il ne nous reste plus qu' mettre jour cette barre de vie depuis zHUD. Code : Java // Dans zHUD.uc, la fin de PostRender() HudMovie.UpdateHealth(myOwner.Pawn.Health); super.PostRender();
Pour tester, ouvrez la console, tapez ghost pour voler haut au dessus de la map, puis walk pour tomber.
Et voil le rsultat !
www.siteduzero.com
216/235
Au programme : un menu avec des lments dynamiques, un curseur, et votre jeu en arrire-plan.
Dans Flash
Nous allons crer une simple frame supplmentaire dans notre fichier Flash, en s'assurant que l'animation s'arrte normalement la premire frame. Le menu et les boutons associs seront masqus dans cette seconde frame, et l'appui sur une touche prcise permettra d'afficher le menu ! La structure du menu lui-mme reste trs simple : trois boutons repris dans MainMenu, un titre et un peu de dcoration. N'oubliez pas de recrer un curseur de souris dans votre seconde frame galement... Attention, le code gnr par Flash pour le curseur ajoute de faon dfinitive un pointeur de souris la scne ! Il vous faut donc le supprimer dans votre premire frame. En admettant que votre instance s'appelle myCursor, voici le code ncessaire : Code : Actionscript if (stage.contains(myCursor)) { stage.removeChild(myCursor); }
www.siteduzero.com
217/235
L'aspect visuel est trs simpliste Si vous testez maintenant votre menu, vous allez vous apercevoir que l'animation tourne en boucle : le menu alterne avec le HUD toute vitesse ! Il nous faut corriger a. Pour chaque frame, ouvrez le panel Actions et ajoutez l'instruction stop dans le code li la scne. Code : Actionscript stop();
Nous allons aussi, titre de dmonstration et par simplicit, grer l'appui sur la touche ECHAP directement dans Actionscript. Dans le code de la premire frame (onglet Actions), nous allons ajouter ces quelques lignes de gestion d'vnements avant l'instruction stop. Code : Actionscript stage.addEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler); function fl_KeyboardDownHandler(event:KeyboardEvent):void { if (event.keyCode == Keyboard.ESCAPE) gotoAndStop(2); }
J'espre que ce code se passe de commentaires ! Il est essentiellement issu de Code Snippet - Key Pressed Event de Flash. N'oubliez pas d'utiliser le mcanisme inverse pour annuler l'effet de ECHAP dans la frame 2 ! Code : Actionscript stage.removeEventListener(KeyboardEvent.KEY_DOWN, fl_KeyboardDownHandler);
V ous tes prts pour Unrealscript, nous allons y grer les vnements de votre menu.
www.siteduzero.com
218/235
Ce TP est simple, tout devrait fonctionner sur le mme modle que ce que vous avez fait prcdemment. Il n'y a absolument rien de nouveau ici du ct Unrealscript, c'est l'organisation des lments qui est nouvelle ! V ous ne pourrez pas tester dans EDK Editor : ECHAP ferme le jeu... V ous devrez utilisez UDK Game.
Au premier essai, un problme va se prsenter : la souris et le mouvement du champ de vision entrent en conflit, rendant le menu inutilisable. Pour corriger a, il suffit de passer le menu en pause. Crez une mthode TogglePause dans Unrealscript qui appelle la commande console pause. V oici comment l'appeler depuis ActionScript. Code : Actionscript import flash.external.ExternalInterface; // Pour appeler TogglePause ExternalInterface.call("TogglePause",this);
Appelez galement TogglePause dans chaque mthode de gestion d'appui sur un bouton pour redmarrer le jeu aprs la fin du menu. Attention, au retour de la pause, la barre de vie ne se mettra pas jour toute seule...
Correction
Pour rfrence, voici la version corrige de GFx_zHUD.uc. Code : Java class GFx_zHUD extends GFxMoviePlayer; var GFxClikWidget var GFxClikWidget var GFxClikWidget var GFxObject var GFxObject ResumeButtonMC; ExitButtonMC; QuitButtonMC;
HealthMC; SceneMC;
www.siteduzero.com
219/235
simulated function UpdateHealth(int amount) { HealthMC.GotoAndStopI(amount); } event bool WidgetInitialized (name WidgetName, name WidgetPath, GFxObject Widget) { switch(WidgetName) { case ('Resume'): ResumeButtonMC = GFxClikWidget(Widget); ResumeButtonMC.AddEventListener('CLIK_click', OnResume); break; case ('QuitMenu'): ExitButtonMC = GFxClikWidget(Widget); ExitButtonMC.AddEventListener('CLIK_click', OnExit); break; case ('QuitDesktop'): QuitButtonMC = GFxClikWidget(Widget); QuitButtonMC.AddEventListener('CLIK_click', OnQuit); break; default: break; } return true;
function TogglePause() { ConsoleCommand("pause"); } function OnResume(GFxClikWidget.EventData evtd) { TogglePause(); SceneMC.GotoAndPlayI(1); HealthMC = GetVariableObject("_root.Health"); } function OnExit(GFxClikWidget.EventData evtd) { ConsoleCommand("open UDKFrontEndMap"); } function OnQuit(GFxClikWidget.EventData evtd) { ConsoleCommand("quit"); } defaultproperties { bDisplayWithHudOff=true bAllowInput=true bAllowFocus=true MovieInfo=SwfMovie'zUI.HUD' WidgetBindings(0)={(WidgetName="Resume",WidgetClass=class'GFxClikWidget')} WidgetBindings(1)={(WidgetName="QuitMenu",WidgetClass=class'GFxClikWidget')} WidgetBindings(2)={(WidgetName="QuitDesktop",WidgetClass=class'GFxClikWidget') } }
www.siteduzero.com
220/235
lments d'aide
Pour mener bien ce TP, vous avez besoin de faire appel au menu depuis Unrealscript, alors que dans l'exemple prcdent, tout se passe avec ActionScript. Pour ce faire, vous avez besoin d'une mthode trs simple, ActionScriptVoid qui va appeler la mthode ActionScript du mme nom. Pour appeler la mthode AS3 foobar, voici le code Unrealscript : Code : Java ActionScriptVoid("foobar");
V ous avez galement besoin de garder en mmoire l'objet vis. Crez une variable locale de type zCrate dans votre zPlayerController pour garder en mmoire la rfrence vers la cible ! ActionScript vous rpondra par appel de fonction, il suffit donc de crer deux fonctions setColorBlue et setColorRed en Unrealscript pour rcuprer le bon choix de l'utilisateur. Faites l'effort de faire ce TP intgralement ! V ous devriez russir vous en sortir avec tout ce qui a t vu avant. Si a ne fonctionne pas tout de suite, essayez encore. Il n'y a pas de correction toute faite ici : nous sommes la fin de cours, c'est maintenant vous de prendre la main. Si vous n'y arrivez pas malgr vos efforts, les membres du forum s'efforceront de vous y aider. Bon courage ! Cet lment tait le dernier de cette srie : vous avez maintenant une interface 2D utilisable pour votre jeu vido. A vous d'aller plus loin, de l'tendre, d'en faire quelque chose de plus complet et efficace : nous n'avons pas fait de menu de rglages, par exemple. Pour en raliser un, vous devez reprendre MainMenu et y ajouter un menu initialement cach, comme pour notre HUD ici. C'est la fin du cours UDK en lui-mme ! Quelques annexes suivent pour voquer des points particuliers qui ne serviront pas tout le monde, mais sont bons connatre.
www.siteduzero.com
221/235
Partie 6 : Annexes
Pour aller plus loin...
Le mesh d'exemple que j'ai choisi. En bas droite, ce menu, c'est Simplygon ! Ce menu comporte trois principaux rglages : Desired Quality : cette option va de 0 100 et reprsente la qualit d'affichage. A 0, c'est le minimum que Simplygon est capable de faire sans dformer gravement votre objet, et 100, c'est votre objet non modifi. Silhouette : plusieurs options vous permettent de contrler quel point vous souhaiter conserver la gomtrie. Texture : c'est exactement la mme chose, cette fois-ci pour les textures. Simplygon utilisera votre UVMap pour optimiser ses calculs. Normals : cette fois-ci, les options ncessitent une explication. V oici les choix possibles : Preserve Smoothing Groups : Conserve le lissage de votre objet, aucun changement ne sera fait de ce ct Recompute Normals : Modifiera le lissage le moins possible, mais le recalcule en fonction des changements apports Recompute Normals (Smooth) : Ajoute un lissage votre objet : il va devenir tout rond ! Recompute Normals (Hard): Supprime le lissage de votre objet, idal pour les machines, dbris... A vous d'exprimenter avec ces rglages ! V ous pouvez parfois diviser par 3 ou 4 le nombre de triangles, avec des dformations minimales, si votre objet n'a pas t optimis auparavant.
www.siteduzero.com
Partie 6 : Annexes
222/235
Avant simplification : 522 triangles, aprs : 279 triangles. Voyez-vous une diffrence ?
Un autre exemple, cette fois-ci moins favorable : on passe tout de mme de 3400 1900 triangles. On ne se rend compte des diffrences qu'en zoomant sur l'objet. Pour enregistrer les modifications il suffit de sauvegarder le package. Attention : pas de retour en arrire possible. Pour plus d'informations, c'est par ici.
Partie 6 : Annexes
223/235
Pour commencer
V ous devez tlcharger les outils Bink sur leur site officiel : http://www.radgametools.com/bnkmain.htm Il s'agit d'une collection d'outils gratuits qui vous aideront convertir votre vido au format utilis dans le logiciel. Cette opration ralisera une compression de la vido pour en diminuer la taille : c'est ainsi que la vido d'introduction d'UDK, de quelques secondes, pse seulement quelques centaines de ko alors qu'elle est en plein cran. Je vous propose donc de trouver sur votre disque dur une petite vido de quelques secondes ou quelques minutes, et d'essayer Bink.
www.siteduzero.com
Partie 6 : Annexes
224/235
Les options de Bink Toutes ces options permettent normment de contrle sur la vido mise en sortie. V ous pouvez en faire une vraie bouillie de pixels autant qu'une vido non dgrade de 3Go... Une fois vos choix termins, il suffit de cliquer sur le bouton Bink qui gnrera la vido compresse. V ous tes prts utiliser la vido ! Dans mon exemple, j'ai gagn uniquement 25% en taille, parce que ma vido tait dj compresse efficacement. Sur une vido brute, le ratio peut tre gigantesque.
Et dans UDK ?
www.siteduzero.com
Partie 6 : Annexes
225/235
Il est trs facile, une fois dans UDK de lire votre vido au format BIK, en utilisant Kismet qui est prsent dans la partie 2 de ce cours. Pour ce faire, une seule condition : votre vido au format m4v, gnre par Bink, doit tre place dans le dossier UDKGame/Movies . Une fois cette manipulation effectue, vous pouvez par exemple utiliser votre vido comme vido de chargement de niveau en remplaant le fichier UDKFrontEnd.udk_loading.bik . De mme, un simple node Kismet suffit lire une vido. Je vous laisse le dcouvrir ici !
Lecture d'une vido depuis Kismet V ous l'aurez compris, encore une fois l'diteur de niveaux d'UDK se place au centre du dveloppement. Pour crer une cinmatique, le plus simple est de jouer la vido directement au dbut d'un niveau. Pourquoi ma vido s'affiche-t-elle avec un watermark de Bink ?
Bink est un logiciel propritaire, payant, comme toutes les solutions dcrites dans ce chapitre. Le marquage de la vido est malheureusement la condition exige pour l'intgration dans UDK. Si vous ralisez un jeu vido professionnel pour le vendre, prenez contact avec eux : moyennant bien entendu le cot d'une licence, ils vous fourniront les outils complets. Pour un jeu amateur, il faudra faire avec, ou utiliser Kismet pour scripter des cinmatiques. Et sur iOS ?
Pour un iPhone, le format de vido utiliser est M4V qui est en fait du MP4 .
www.siteduzero.com
Partie 6 : Annexes
226/235
Un exemple d'usage de SpeedTree : Avatar, le film bien connu, qui l'utilise massivement !
L'diteur de SpeedTree
Lancez donc SpeedTree Modeler UDK que vous trouverez dans le dossier Binaries/SpeedTreeModeler.
L'interface principale de SpeedTree V ous pouvez observer des exemples d'arbres fournis avec l'outil, dans le dossier Samples/Tree. C'est une bonne piste pour apprendre, comme toujours ! Ces objets sont l pour qu'on s'en serve. Pour ouvrir un SpeedTree, il suffit de faire File - Open et de slectionner un fichier SPM.
www.siteduzero.com
Partie 6 : Annexes
227/235
Un arbre d'exemple L'usage de SpeedTree ne fait pas l'objet de ce cours. De nombreuses vidos de dmonstration existent, nous allons ici nous contenter de tester un des arbres de dmonstration. Une fois que vous tes satisfait de votre arbre, vous pouvez passer l'importation.
Compiler
Avant tout, vous devez compiler votre SpeedTree. Ce processus est trs simple, il suffit de lancer SpeedTree Compiler UDK que vous trouverez dans le dossier Binaries/SpeedTreeModeler d'UDK.
Le compilateur SpeedTree : cliquez sur Add Tree , slectionnez votre arbre et cliquez sur Next
www.siteduzero.com
Partie 6 : Annexes
228/235
Choisissez le chemin dans lequel gnrer les ressources avant de cliquer sur Finish and Compile .
Encore une nouvelle fentre ! Cette fois, elle vous propose d'exporter votre arbre au format SRT. Cliquez sur Compile, et cette fois-ci c'est la bonne ! SpeedTree gnre un fichier d'arbre SRT et des textures au format TGA.
Importer et tester
www.siteduzero.com
Partie 6 : Annexes
229/235
Une fois la compilation effectue, vous disposez d'un fichier SRT qui correspond votre arbre prt tre utilis dans UDK ! C'est le moment de lancer Unreal Editor. L'importation va se drouler exactement comme pour n'importe quel autre contenu : dans le Content Browser, importez le fichier SRT ainsi que les textures gnres par la compilation. Une fois la manipulation effectue, vous tes en possession d'une ressource compltement classique : un model 3D au format SRT, des textures. Le cours vous a dj appris manipuler les Material , inutile d'y revenir maintenant, n'est-ce pas ? V ous pouvez donc crer un Material pour chaque section (tronc, branches...) et ensuite utiliser votre SpeedTree dans vos niveaux comme si c'tait un StaticMesh. Cette manipulation est longue, mais a priori, vous n'aurez pas besoin de dix modles d'arbre dans chaque niveau !
Le SpeedTree termin et en place ! Si vous avez suivi cette partie, vous ne devez pas regretter vos efforts... L'arbre ondule avec le vent, son ombre est gnre... N'ayez pas peur de recourir ces outils : ils sont efficaces, utiliss depuis bien longtemps dans l'industrie, et habituellement trs chers. C'est une opportunit rare que d'y avoir accs.
www.siteduzero.com
Partie 6 : Annexes
230/235
zFortress en pleine action zFortress se prsente comme une sorte de Tower Defense : les niveaux comportent des zones de construction sur lesquelles, moyennant finance, le joueur peut construire des tourelles dfensives. Le joueur gagne de l'argent au fil du temps et en dtruisant les tourelles adverses jusqu' liminer ses dfenses et dtruire sa base.
www.siteduzero.com
Partie 6 : Annexes
} if (ResultTowers.Length == 0) return false; // Nearest tower bestIndex = 0; bestDistance = 100000; for (index = 0; index < ResultTowers.Length; index++) { tempTower = ResultTowers[index]; distance = VSize(tempTower.Location - Location); if (distance < bestDistance) { bestDistance = distance; bestIndex = index; } } `log("Acquired tower "@targetPawn@self); EnemyTarget = ResultTowers[bestIndex]; return true;
231/235
Les diffrentes catgories de tourelles sont gres facilement grce l'hritage, il est extrmement facile d'ajouter une nouvelle tourelle (quelques lignes seulement pour un changement visuel).
Un aperu des zones de construction, avec un effet de construction sur l'une d'elles
www.siteduzero.com
Partie 6 : Annexes
Code : Java simulated function SpawnChild(class<Tower> TClass) { if (!bHasChild && IsActivated()) { classToSpawn=TClass; bHasChild = true; bCanChildBeKilled = false; BuildingProgress.SetActive(true, false); SetTimer(SpawnTime,false,'BuildingComplete'); `log("Tower spawning\n");
232/235
La cration du contenu
Un projet de jeu vido, ce n'est pas que du code : c'est aussi normment de contenu audiovisuel. Son, objets 3D, textures, effets spciaux... C'est un travail norme. Les effets spciaux du jeu sont un lment trs important de ce dernier : icnes de sant, icnes de construction, projectiles et effets de constructions, vous allez tout savoir dessus.
www.siteduzero.com
Partie 6 : Annexes
Un aperu de diffrents objets anims crs pour zFortress
233/235
L'effet de construction
Le Material employ pour les bordures lumineuses. Le logo en est une copie avec une texture diffrente, et tourne sur lui-mme
Un ParticleSystem labor : l'animation de construction. Rotations, translations sont les principales actions appliques deux types de particules : la particule "bordure", et la particule "logo" qui elle, tourne. Comme vous le voyez, rien n'est magique ici. Il suffit d'utiliser des textures basiques pour en faire des lments anims complexes !
Niveaux et dcors
Les dcors sont exclusivement constitus de StaticMesh : raliss dans un diteur externe, ils sont ensuite simplifis via Simplygon, comme l'enseigne l'annexe prcdente. La plupart des lments de dcor ne psent donc que quelques centaines de triangles, l o le mesh d'origine peut afficher plus de 10 000 polygones au compteur !
www.siteduzero.com
Partie 6 : Annexes
234/235
Gestion du projet
L'essentiel de la gestion de projet a t faite dans une discussion commune entre tous les participants : c'est une approche simple mais qui reste directe, efficace. Nous nous tions rpartis ainsi les rles : en tant que fondateur du projet, j'ai ralis l'intgration des lments, ainsi que le code du jeu ; les lments 3D ont t raliss par un deuxime participant, qui fournissait donc des packages prts l'emploi ; enfin, la musique a t propose par un troisime contributeur. V ous pouvez suivre l'historique du dveloppement dans le sujet du forum ! La principale force d'UDK pour un tel projet est la quasi-totale indpendance qu'il permet pour tous les acteurs : sur trois participants, un seul avait besoin d'une version de travail complte du jeu. Les autres peuvent travailler sur des lments compltement indpendants sans mme avoir le jeu : ils n'ont qu' fournir le package UDK correspondant leur travail, celui-ci est simplement copi dans l'arborescence du jeu et il est prt tre employ. Si vous avez des questions sur ce projet, n'hsitez pas les poser sur le forum Mapping & Modding : il existe un sujet ddi.
www.siteduzero.com