<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://shad-fr.com/devblog/?feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>S h a d . devblog</title>
  <link>http://shad-fr.com/devblog/?</link>
  <atom:link href="http://shad-fr.com/devblog/?feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Fri, 11 May 2012 14:53:12 +0100</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>[Tutorial] - 03 - Un premier mode de jeu</title>
    <link>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-03-Un-premier-mode-de-jeu</link>
    <guid isPermaLink="false">urn:md5:88028bcbe83b467d31d757c53f49abcf</guid>
    <pubDate>Sat, 26 Jun 2010 21:19:00 +0100</pubDate>
    <dc:creator>Aloïs Deniel</dc:creator>
            
    <description>&lt;p&gt;Nous allons enfin commencer à coder, et pour cela, j'ai choisi de vous montrer un petit exemple de jeu très simple dérivé du &quot;Deathmatch&quot; de &quot;Unreal Tournament&quot; fourni avec chaque version de l'UDK.&lt;/p&gt;    &lt;h2&gt;&lt;ins&gt;Les règles du jeu&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Bon alors, on va commencer tout en douceur. Le but va être ici très simple : augmenter la taille des personnages des joueurs en fonction du nombre de frags consécutifs qu'ils exécutent. Nous aurons juste besoin de créer une nouvelle classe pour réaliser cela, nouvelle classe qui sera hérité de la classe &quot;&lt;em&gt;UTDeathmatch&lt;/em&gt;&quot; (elle-même héritée indirectement de &quot;GameInfo&quot;).&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Le code&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Voilà tout d'abord une vue d'ensemble de la classe que nous allons faire. Essayez de comprendre par vous même dans un premier temps, puis passez à la suite.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;class&lt;/em&gt; Tutorial_Game &lt;em&gt;extends&lt;/em&gt; UTDeathmatch;&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;function&lt;/em&gt; ScoreKill(&lt;strong&gt;Controller&lt;/strong&gt; Killer, &lt;strong&gt;Controller&lt;/strong&gt; Other)&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;local&lt;/em&gt; &lt;strong&gt;float&lt;/strong&gt; NewScale;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;super&lt;/em&gt;.ScoreKill(Killer,Other);&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;if&lt;/em&gt;(Killer &lt;ins&gt;!=&lt;/ins&gt; none &lt;ins&gt;&amp;amp;&amp;amp;&lt;/ins&gt; Killer &lt;ins&gt;!=&lt;/ins&gt; Other)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;em&gt;if&lt;/em&gt;(Killer.Pawn &lt;ins&gt;!=&lt;/ins&gt; none &lt;ins&gt;&amp;amp;&amp;amp;&lt;/ins&gt; Killer.Pawn.DrawScale&lt;ins&gt;&amp;lt; 2.0 &lt;/ins&gt;)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NewScale &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.DrawScale &lt;ins&gt;+ 0.2&lt;/ins&gt;;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.SetDrawScale(NewScale);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.BaseEyeHeight &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.default.BaseEyeHeight &lt;ins&gt;*&lt;/ins&gt; NewScale;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.CylinderComponent.SetCylinderSize&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(Killer.Pawn.default.CylinderComponent.CollisionRadius &lt;ins&gt;*&lt;/ins&gt; NewScale,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.default.CylinderComponent.CollisionHeight&lt;ins&gt;*&lt;/ins&gt; NewScale);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.GroundSpeed &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.default.GroundSpeed &lt;ins&gt;*&lt;/ins&gt; NewScale;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.JumpZ &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.default.JumpZ &lt;ins&gt;*&lt;/ins&gt; NewScale;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Killer.Pawn.bCanCrouch &lt;ins&gt;=&lt;/ins&gt; false;&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Broadcast( &lt;em&gt;self&lt;/em&gt;,&quot;Taille de&quot;&lt;ins&gt;@&lt;/ins&gt;Killer.GetHumanReadableName()&lt;ins&gt;@&lt;/ins&gt;&quot;:&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;ins&gt;@&lt;/ins&gt;Killer.Pawn.DrawScale,);&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;
}&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Quelques explications&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Bon, étudions un peu cela en détail :&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;class&lt;/em&gt; Tutorial_Game &lt;em&gt;extends&lt;/em&gt; UTDeathmatch;&lt;/p&gt;
&lt;p&gt;Comme prévu, notre mode de jeu va garder toutes les caractéristiques du &quot;Deathmatch&quot; de UT, d'où cet héritage.
&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;function&lt;/em&gt; ScoreKill(&lt;strong&gt;Controller&lt;/strong&gt; Killer, &lt;strong&gt;Controller&lt;/strong&gt; Other)&lt;/p&gt;
&lt;p&gt;Il y a cependant quelque chose a modifier pour arriver à nos fins : la fonction &quot;&lt;em&gt;ScoreKill(Controller Killer, Controller Other)&lt;/em&gt;&quot; qui est appelé à chaque frag. Nous allons donc surcharger cette fameuse fonction afin de modifier la taille de &quot;Killer&quot;.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;local&lt;/em&gt; &lt;strong&gt;float&lt;/strong&gt; NewScale;&lt;/p&gt;
&lt;p&gt;Cette ligne est une déclaration de variable temporaire (grâce au mot &quot;local&quot;, et toujours placée en début de fonction). Cela signifie que cette variable de type &quot;float&quot; ne vivra que le temps de l'exécution de la fonction. Cette variable &quot;NewScale&quot; va permettre de stocker la nouvelle échelle de taille du personnage.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;super&lt;/em&gt;.ScoreKill(Killer,Other);&lt;/p&gt;
&lt;p&gt;Bon alors ... si vous avez quelques notions de programmation orientée objet vous devez savoir que le mot clé &quot;&lt;em&gt;super&lt;/em&gt;&quot; permet d'appeler la fonction courante de la classe mère. Cette ligne va donc permettre de faire le calcul de score en se basant sur la fonction &quot;&lt;em&gt;ScoreKill&lt;/em&gt;&quot; de la classe &quot;&lt;em&gt;UTDeathmatch&lt;/em&gt;&quot;. Nous pourront ensuite rajouter les quelques fonctionnalités que nous souhaitons intégrer au jeu. Cela permet de nous éviter un énorme copier/coller de la fonction originale.&lt;/p&gt;
&lt;p&gt;Si vous avez suivi le cours précèdent, vous devez savoir que le personnage du joueur est un &quot;Pawn&quot;. Il est très simplement référence par un attribut de nom de &quot;Pawn&quot; dans la classe &quot;Controller&quot; et est donc très facile d'accès (&quot;NomDuController.Pawn&quot;). De la même manière on peut accéder à l'attribut &quot;DrawScale&quot; de la classe &quot;Pawn&quot; (&quot;NomDuPawn.DrawScale&quot;) qui, comme son nom l'indique, définie l'échelle du model du joueur. Il faut cependant faire attention, car quelques variables (dont cette dernière) ne peuvent pas être assignées directement ( &quot;~.DrawScale = 5;&quot; n'est pas autorisé), mais il existe en général une fonction (dont le nom est souvent &quot;Set + NomDeLaVariable&quot;) qui permet de la changer (ici &quot;SetDrawScale&quot; donc).&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&amp;gt;&lt;em&gt;if&lt;/em&gt;(Killer &lt;ins&gt;!=&lt;/ins&gt; none &lt;ins&gt;&amp;amp;&amp;amp;&lt;/ins&gt; Killer &lt;ins&gt;!=&lt;/ins&gt;
Other)&lt;/p&gt;
&lt;p&gt;La première conditionnelle permet de vérifier deux chose : que le tueur existe (le joueur peut être tué par le décor ou autre on ne sait jamais) et que le tueur n'est pas le tué. Si ces deux conditions sont vérifiées on exécute le code principal de la fonction.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;&lt;em&gt;if&lt;/em&gt;(Killer.Pawn &lt;ins&gt;!=&lt;/ins&gt; none &lt;ins&gt;&amp;amp;&amp;amp;&lt;/ins&gt;
Killer.Pawn.DrawScale&lt;ins&gt;&amp;lt; 2.0 &lt;/ins&gt;)&lt;/p&gt;
&lt;p&gt;On trouve ensuite à nouveau une conditionnelle qui vérifie que le &quot;Killer&quot; possède bien un &quot;Pawn&quot;, mais aussi que l'échelle actuelle du joueur est inférieure à deux fois la taille normale. Si toutes ces conditions sont vérifiées, on va enfin passer au changement d'échelle.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;NewScale &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.DrawScale &lt;ins&gt;+ 0.2&lt;/ins&gt;;&lt;/p&gt;
&lt;p&gt;Le calcul de changement d'échelle va se faire très simplement : on va attribuer à &quot;NewScale&quot; la valeur actuelle du &quot;DrawScale&quot; plus &quot;0.2&quot;. Le joueur pourra donc grossir au maximum cinq fois et obtenir une échelle deux fois plus grande que la normale.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;
Killer.Pawn.SetDrawScale(NewScale);&lt;br /&gt;Killer.Pawn.BaseEyeHeight &lt;ins&gt;=&lt;/ins&gt;
Killer.Pawn.default.BaseEyeHeight &lt;ins&gt;*&lt;/ins&gt; NewScale;&lt;br /&gt;
Killer.Pawn.CylinderComponent.SetCylinderSize&lt;br /&gt;
(Killer.Pawn.default.CylinderComponent.CollisionRadius &lt;ins&gt;*&lt;/ins&gt;
NewScale,&lt;br /&gt;
Killer.Pawn.default.CylinderComponent.CollisionHeight&lt;ins&gt;*&lt;/ins&gt;
NewScale);&lt;br /&gt;
Killer.Pawn.GroundSpeed &lt;ins&gt;=&lt;/ins&gt;
Killer.Pawn.default.GroundSpeed &lt;ins&gt;*&lt;/ins&gt; NewScale;&lt;br /&gt;
Killer.Pawn.JumpZ &lt;ins&gt;=&lt;/ins&gt; Killer.Pawn.default.JumpZ &lt;ins&gt;*&lt;/ins&gt;
NewScale;&lt;br /&gt;Killer.Pawn.bCanCrouch &lt;ins&gt;=&lt;/ins&gt; false;&lt;/p&gt;
&lt;p&gt;Bon, maintenant que nous avons la nouvelle échelle, nous pouvons procéder aux changements. Nous commençons par redéfinir l'echelle du model du personnage. La ligne suivante va permettre de changer la hauteur des yeux du personnage (et donc de la camera). Vous avez peut-être remarqué le mot clé &quot;&lt;em&gt;default&lt;/em&gt;&quot; qui permet d'obtenir la valeur par défaut de l'attribut (celle entrée dans les &quot;Default Properties&quot; donc). Nous changeons donc la hauteur proportionnellement à l'échelle de taille. Il faut ensuite changer les collisions pour qu'elles s'adaptent à la nouvelle taille. J'ai décidé de changer la vitesse du joueur et la hauteur des sauts pour que tout soit plus logique. Ici, nous avons donc encore la même façon de faire.&lt;/p&gt;
&lt;p class=&quot;uscript&quot;&gt;Broadcast( &lt;em&gt;self&lt;/em&gt;,&quot;Taille de&quot;&lt;ins&gt;@&lt;/ins&gt;Killer.GetHumanReadableName()&lt;ins&gt;@&lt;/ins&gt;&quot;:&quot;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;ins&gt;@&lt;/ins&gt;Killer.Pawn.DrawScale,);&lt;/p&gt;
&lt;p&gt;Cette dernière ligne s'occupe simplement d'afficher la tailler des différents joueurs. Vous pouvez remarquer l'operateur &quot;&lt;em&gt;@&lt;/em&gt;&quot; qui concatène (colle) deux chaînes en rajoutant un espace (contrairement à &quot;$&quot; qui n'en rajoute pas) .&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Tester le mode de jeu&lt;br /&gt;&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Pour tester ce code, commencez par enregistrer votre fichier de classe dans le dossier créé dans le premier tutorial '&quot;du nom de &quot;Tutorial&quot; justement). Il faut obligatoirement donner à ce fichier le même nom que le nom de la classe. Enregistrez donc cela sous le nom &quot;Tutorial_Game.uc&quot;.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/03/001_fichier.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Notre première classe.&lt;/p&gt;
&lt;p&gt;Ouvrez maintenant &quot;UnrealFrontend&quot; et compilez votre code qui ne doit normalement pas produire d'erreur. Pour tester le jeu sur la map &quot;DM-Deck&quot;, entrez le texte suivant dans &quot;Map To Play&quot; : &quot;&lt;em&gt;DM-Deck?game=Tutorial.Tutorial_Game&lt;/em&gt;&quot;, puis cliquez sur &quot;&lt;em&gt;Launch&lt;/em&gt;&quot;.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/03/002_compile.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Aucune erreur ... tout va bien !&lt;/p&gt;
&lt;p&gt;Et voilà, notre mode de jeu à l'aire de bien fonctionner.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/03/003_ingame.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Ohlala, c'est quoi ce machin !&lt;/p&gt;</description>
    
    
    
          <comments>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-03-Un-premier-mode-de-jeu#comment-form</comments>
      <wfw:comment>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-03-Un-premier-mode-de-jeu#comment-form</wfw:comment>
      <wfw:commentRss>http://shad-fr.com/devblog/?feed/atom/comments/6</wfw:commentRss>
      </item>
    
  <item>
    <title>[Tutorial] - 02 - Organisation des classes</title>
    <link>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-02-Organisation-des-classes</link>
    <guid isPermaLink="false">urn:md5:b091ed96beae33ae221820df5327434c</guid>
    <pubDate>Sat, 26 Jun 2010 16:04:00 +0100</pubDate>
    <dc:creator>Aloïs Deniel</dc:creator>
        <category>Unreal Development Kit</category>
            
    <description>&lt;p&gt;Dans ce second tutorial, nous allons jeter un rapide coup d'œil au contenu du dossier &quot;&lt;em&gt;~/Development/Src&lt;/em&gt;&quot;, et tenter de comprendre un minimum l'organisation de quelques classes livrées avec l'UDK et très importantes à la création de votre jeu.&lt;/p&gt;    &lt;p&gt;Il est évident qu'il va falloir se renseigner un peu sur le fonctionnement et l'organisation des objets que EpicGames nous à livré avant de nous lancer. Nous allons en effet réutiliser au maximum le travail déjà effectuer, nous baser sur tout cela pour créer de nouvelles classes.&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Quelques classes importantes&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Commençons par un schéma de quelques classes que je considère comme indispensables :&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; padding: 25px; margin: 10px; text-align: center;&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/02/001_udkclasses.jpg&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;En partant du principe que la notion de programmation orientée objet est familière pour vous, vous avez sans doute remarqué que la plupart des classes héritent de la classe &quot;&lt;em&gt;Actor&lt;/em&gt;&quot;. Ayez donc toujours le réflexe, lorsque vous étudiez une classe précise, d'ouvrir aussi toutes les classe dont hérite cette dernière, car, je vous le rappelle, toutes les fonctions et attributs des classes héritées sont disponibles dans la classe fille.&lt;/p&gt;
&lt;p&gt;D'autre part, ne pensez pas qu'il suffit de connaître cette poignée de classes pour devenir un &quot;génie du UnrealScript&quot; ! En effet, la plupart du travail doit être fait par vous même, en étudiant au maximum les différentes classes mises à disposition.&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Pourquoi cette sélection ?&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Ce choix est purement arbitraire, considérant que ces classes permettent d'aboutir à quelques résultats probants sans trop se plonger dans les classes les plus complexes. Je pense que se familiariser avec ces quelques exemples permettra d'avoir une bonne approche du fonctionnement du moteur (c'est en tout cas comme cela que j'ai appris).&lt;/p&gt;
&lt;p&gt;Je vais maintenant vous expliquer cas par cas, la raison de ce choix :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Actor&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Comme déjà introduit, une grande majorité des éléments de l'UDK sont basés sur cette classe. Elle instaure des fonctionnalités que l'on retrouvera dans pratiquement chaque classe et se doit donc d'être étudiée. En effet, c'est dans cette classe que les coordonnées, l'orientation, la vitesse sont définies, tout comme des fonctions incontournables telles que &quot;Tick&quot; (mise à jour des objet au cours du temps), &quot;Trace&quot; (test de collision avec l'environnement), &quot;SetTimer&quot; (execution d'une fonction au terme d'un chrono), etc ...&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ActorComponent&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Pour simplifier, ces objets peuvent être &quot;attachés&quot; à des &quot;Actors&quot; très simplement. C'est souvent eux qui vont définir l'aspect physique d'un &quot;Actor&quot;. On va par exemple attacher un model 3D (&quot;StaticMeshComponent&quot; ou &quot;SkeletalMeshComponent&quot;), un éclairage (&quot;DynamicLightEnvironmentComponent&quot;), une projection de texture (&quot;DecalComponent&quot;), etc ..&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;GameInfo&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;C'est cette classe qui va définir toutes les règles de jeu, la manière de marquer des points, mais aussi le type de joueurs ou le HUD du mode de jeu par exemple.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Controller/PlayerController&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Chaque joueur (qu'il soit humain ou virtuel) dans le jeu est en fait représenté par un &quot;Controller&quot;. Comme son nom l'indique, le &quot;Controller&quot; va donner des ordres à une &quot;marionnette&quot; qui sera sa représentation physique dans le monde. Le joueur n'est donc pas, comme on pourrait le croire, le personnage qui bouge dans les niveau, mais le &quot;Controller&quot; qui lui dirige le personnage ... Vous avez saisi ?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Pawn&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;C'est justement le &quot;Pawn&quot; (en français &quot;Pion&quot;) qui est cette &quot;marionnette&quot; évoquée précédemment. C'est le &quot;Pawn&quot; qui possède toutes les caractéristiques liées au déplacement, mouvements, capacités .. mais aussi des points de vie. Lorsque le &quot;Pawn&quot; controllé par un &quot;Controller&quot; n'a plus de points de vie, il est alors supprimé et un nouveau &quot;Pawn&quot; entre donc sous le contrôle du &quot;Controller&quot; concerté (je parle évidement ici des jeux où vous avez plusieurs vies).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Volume/TriggerVolume&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Bon, là je vais vous avouer que c'est loin d'être une priorité ... mais je pense tout de même qu'il y a matière à s'amuser avec les &quot;Volumes&quot;. En effets, les &quot;Volumes&quot; sont souvent au centre du gameplay car il permettent de changer le comportement du joueur, ou de déclencher certains mécanismes lorsque les joueurs entre dans ces derniers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Weapon&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Modifier une arme est surement la première chose à faire. C'est d'une part simple a faire, mais aussi extrêmement jouissif lorsque l'on commence à coder sur ce moteur. Il est très facile de changer quelques attributs des armes de la demo fournie avec l'UDK et d'obtenir des résultats très surprenants !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;KActorSpawnable&lt;/em&gt;&lt;p style=&quot;font-size: 11px;&quot;&gt;Cet &quot;Actor&quot; réagi tout simplement à la physique. Il est donc très pratique pour créer toutes sortes de balles, grenades, etc ...&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-02-Organisation-des-classes#comment-form</comments>
      <wfw:comment>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-02-Organisation-des-classes#comment-form</wfw:comment>
      <wfw:commentRss>http://shad-fr.com/devblog/?feed/atom/comments/5</wfw:commentRss>
      </item>
    
  <item>
    <title>[Tutorial] - Sommaire</title>
    <link>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-Sommaire</link>
    <guid isPermaLink="false">urn:md5:49e454a10f90f1deeb042bc71750c204</guid>
    <pubDate>Sat, 26 Jun 2010 12:37:00 +0100</pubDate>
    <dc:creator>Aloïs Deniel</dc:creator>
            
    <description>&lt;p&gt;Voici le sommaire de tous les cours disponibles sur ce blog.&lt;/p&gt;    &lt;h2&gt;Unreal Development Kit&lt;/h2&gt;
&lt;ul style=&quot;font-size: 18px;&quot;&gt;
&lt;li&gt;
&lt;a href=&quot;http://shad-fr.com/devblog/?post/2010/06/25/%5BTutorial%5D-01-Introduction&quot;&gt;01 - Introduction&lt;/a&gt;
&lt;ul style=&quot;font-size: 9px; margin: 20px;&quot;&gt;
&lt;li&gt;Qu'est ce que l'UDK ?&lt;/li&gt;
&lt;li&gt;Téléchargement de l'UDK&lt;/li&gt;
&lt;li&gt;Hiérarchie des dossiers&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;li&gt;Quel éditeur choisir ?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href=&quot;http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-02-Organisation-des-classes&quot;&gt;02 - Organisation des classes&lt;/a&gt;
&lt;ul style=&quot;font-size: 9px; margin: 20px;&quot;&gt;
&lt;li&gt;Quelques classes importantes&lt;/li&gt;
&lt;li&gt;Pourquoi cette sélection ?&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-03-Un-premier-mode-de-jeu&quot;&gt;03 - Un premier mode de jeu&lt;/a&gt;
&lt;ul style=&quot;font-size: 9px; margin: 20px;&quot;&gt;
&lt;li&gt;Les règles du jeu&lt;/li&gt;
&lt;li&gt;Le code&lt;/li&gt;
&lt;li&gt;Quelques explications&lt;/li&gt;
&lt;li&gt;Tester le mode de jeu&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;</description>
    
    
    
          <comments>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-Sommaire#comment-form</comments>
      <wfw:comment>http://shad-fr.com/devblog/?post/2010/06/26/%5BTutorial%5D-Sommaire#comment-form</wfw:comment>
      <wfw:commentRss>http://shad-fr.com/devblog/?feed/atom/comments/4</wfw:commentRss>
      </item>
    
  <item>
    <title>[Tutorial] - 01 - Introduction</title>
    <link>http://shad-fr.com/devblog/?post/2010/06/25/%5BTutorial%5D-01-Introduction</link>
    <guid isPermaLink="false">urn:md5:d3c1ac45e22fd453d22937bc0bf585d5</guid>
    <pubDate>Fri, 25 Jun 2010 22:59:00 +0100</pubDate>
    <dc:creator>Aloïs Deniel</dc:creator>
        <category>Unreal Development Kit</category>
            
    <description>&lt;p&gt;Dans ce premier tutorial, nous allons commencer par tout configurer pour taper nos premières lignes de codes sans encombres dans les tutoriaux qui suivront. Nous allons donc voir où se procurer l'UDK, où placer nos fichiers de code et comment compiler tout cela.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/udklogo.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Qu'est ce que l'UDK ?&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Avant toute chose, vous ne savez peut être pas ce qu'est l'UDK. L'Unreal Development Kit, comme sont nom l'indique plutôt clairement, est une mise à disposition par &lt;a href=&quot;http://www.epicgames.com/&quot;&gt;EpicGames&lt;/a&gt; d'une suite d'outils de développement pour la dernière version de son fameux moteur 3D&amp;nbsp;: l'Unreal Engine 3 (utilisé dans de nombreux jeux-vidéo tels que Gears Of War, Unreal Tournament III, Bioshock, Mass Effect, etc ...). Tant qu'aucun profit n'est fait à partir de cela, l'utilisation de tous ces outils pour le développement, ainsi que la publication d'un jeu-vidéo sont complètement gratuites.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/01/001_exemples.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;
&lt;a href=&quot;http://udk.com/showcase-bounty-arms&quot; hreflang=&quot;en&quot;&gt;Bounty Arms est un parfait exemple d'utilisation de l'UDK&lt;/a&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;&lt;ins&gt;Téléchargement de l'UDK&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Le simple téléchargement du fichier d'installation vous donne accès à un bon nombre d'outils : sources, éditeur de maps (qui comprend lui même énormément d'outils), demo de UT et SpeedTree. Télécharger donc les centaines de MB de la dernière version et installez-la dès à présent via le lien livré ci-dessous. Je ne saurais que vous conseiller de télécharger la dernière version disponible, l'UDK étant encore en beta à l'heure où je vous parle, EpicGames faisant un énorme travail pour apporter un tas d'améliorations chaque mois ! &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://udk.com/download&quot; style=&quot;font-size: 15px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 8px; margin: 20px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/dl_icon.png&quot; alt=&quot;&quot; /&gt;&amp;nbsp;&amp;nbsp;Page de téléchargement officielle&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Hiérarchie des dossiers&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Lors de cette série de tutoriaux, je ne me concentrerais que sur l'aspect programmation de l'UDK, je ne ferais donc pas de descriptif détaillé de chaque dossier créé lors de l'installation. En effet, le dossier sur lequel je me concentrerais est le dossier &quot;&lt;em&gt;~/Development/Src&lt;/em&gt;&quot; du répertoire d'installation, qui contient évidemment une grande partie des sources du moteur. Toutes les classes (fichiers portant l'extension &quot;~.uc&quot;) qui se trouvent dans ce dossier pourront être compilées.&lt;/p&gt;
&lt;p&gt;Pour créer votre premier projet, il va d'abord falloir créer un dossier du nom de ce dernier dans le dossier &quot;&lt;em&gt;~/Development/Src&lt;/em&gt;&quot;.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/01/002_dossier.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Le projet d'exemple présenté ici aura pour nom &quot;Tutorial&quot;, mais vous pouvez évidement procéder avec un nom différent.&lt;/p&gt;
&lt;p&gt;Il faut ensuite, de la même façon créer un dossier &quot;&lt;em&gt;Classes&lt;/em&gt;&quot; dans le dossier de votre projet. C'est dans ce nouveau dossier que vous devrez placer vos classes (fichiers portant l'extension &quot;~.uc&quot;).&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/01/003_classes.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;Ce dossier contiendra toutes les classes de votre nouveau projet.&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Configuration&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Maintenant que vous savez où placer votre code, nous allons indiquez au moteur où seront vos classes afin qu'il puisse les compiler. Ouvrez donc le fichier &quot;&lt;em&gt;UDKEngine.ini&lt;/em&gt;&quot; placé dans le dossier &quot;&lt;em&gt;~\UDKGame\Config&lt;/em&gt;&quot; avec n'importe quel éditeur de texte. Cherchez la ligne &quot;&lt;em&gt;;ModEditPackages=MyMod&lt;/em&gt;&quot; de la catégorie &quot;&lt;em&gt;[UnrealEd.EditorEngine]&lt;/em&gt;&quot;, puis remplacez là par (ou rajoutez la ligne juste après) &quot;&lt;em&gt;ModEditPackages=Tutorial&lt;/em&gt;&quot;.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/01/004_udkengine.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;C'est dans ce fichier que l'on indique au moteur où se trouve les classes de notre projet à compiler.&lt;/p&gt;
&lt;p&gt;Voilà, vous pouvez désormais compiler votre code. Pour cela, ouvrez le logiciel &quot;&lt;em&gt;Unreal Frontend&lt;/em&gt;&quot; livré avec l'UDK, puis cliquez sur &quot;&lt;em&gt;Make &amp;gt; Full Recompile&lt;/em&gt;&quot;. Après quelques secondes, vous avez le résultat de la compilation dans la zone de droite. Il y a une alerte, ce qui est normal étant donné qu'il n'y a aucune classe à compiler pour le moment.&lt;/p&gt;
&lt;p style=&quot;font-size: 9px; background: none repeat scroll 0% 0% rgb(254, 250, 245); padding: 25px; margin: 10px; text-align: center; border: 1px dotted rgb(174, 160, 138);&quot;&gt;&lt;img src=&quot;http://shad-fr.com/devblog/images/udk/01/005_ufrontend.jpg&quot; alt=&quot;&quot; /&gt;&lt;br /&gt;C'est dans UnrealFrontend que l'on re-compile tout le code de l'UDK.&lt;/p&gt;
&lt;h2&gt;&lt;ins&gt;Quel éditeur choisir ?&lt;/ins&gt;&lt;/h2&gt;
&lt;p&gt;Pour taper vos lignes de codes, il n'y a pas de réel éditeur complet dédié à l'UnrealScript, mais il existe tout de même quelques solutions :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/visualstudio/en-us/&quot; hreflang=&quot;en&quot;&gt;Visual Studio 2008&lt;/a&gt; + &lt;a href=&quot;http://wiki.pixelminegames.com/index.php?title=Tools:nFringe&quot; hreflang=&quot;en&quot;&gt;nFringe&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/notepad-plus/&quot; hreflang=&quot;en&quot;&gt;Notepad++&lt;/a&gt; + &lt;a href=&quot;http://notepad-plus.sourceforge.net/commun/userDefinedLang/userDefineLang_UnrealScript.xml&quot; hreflang=&quot;en&quot;&gt;Langage UnrealScript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.wotgreal.com/&quot; hreflang=&quot;en&quot;&gt;WotGreal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sourceforge.net/projects/uncodex/&quot; hreflang=&quot;en&quot;&gt;UnCodeX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A vous de faire un choix. Personnellement j'utilise Notepad++, bien que moins complet que nFringe , j'apprécie sa simplicité.&lt;/p&gt;</description>
    
    
    
          <comments>http://shad-fr.com/devblog/?post/2010/06/25/%5BTutorial%5D-01-Introduction#comment-form</comments>
      <wfw:comment>http://shad-fr.com/devblog/?post/2010/06/25/%5BTutorial%5D-01-Introduction#comment-form</wfw:comment>
      <wfw:commentRss>http://shad-fr.com/devblog/?feed/atom/comments/3</wfw:commentRss>
      </item>
    
</channel>
</rss>
