<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[A Game Studio]]></title><description><![CDATA[Créateurs de jeux vidéos. A Time Paradox: Vous êtes coincé dans une boucle temporelle. Infiltrez-vous contre vous-même pour éviter le paradoxe temporel !]]></description><link>https://a-game-studio.com</link><generator>GatsbyJS</generator><lastBuildDate>Mon, 19 Oct 2020 13:16:53 GMT</lastBuildDate><item><title><![CDATA[Unity étape par étape - jeu de ballon]]></title><description><![CDATA[Aperçu: 
→ Installer Unity 
→ Afficher un sprite 
→ Animer un sprite 
→ Les règles du jeu 
→ Le moteur physique 
→ Trucs et astuces  Note…]]></description><link>https://a-game-studio.com/fr/blog/unity-step-by-step-ball-game/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/unity-step-by-step-ball-game/</guid><pubDate>Thu, 21 May 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Aperçu: &lt;br&gt;
→ &lt;a href=&quot;#installer-unity&quot;&gt;Installer Unity&lt;/a&gt; &lt;br&gt;
→ &lt;a href=&quot;#afficher-un-sprite&quot;&gt;Afficher un sprite&lt;/a&gt; &lt;br&gt;
→ &lt;a href=&quot;#animer-un-sprite&quot;&gt;Animer un sprite&lt;/a&gt; &lt;br&gt;
→ &lt;a href=&quot;#les-r%C3%A8gles-du-jeu&quot;&gt;Les règles du jeu&lt;/a&gt; &lt;br&gt;
→ &lt;a href=&quot;#le-moteur-physique&quot;&gt;Le moteur physique&lt;/a&gt; &lt;br&gt;
→ &lt;a href=&quot;#trucs-et-astuces&quot;&gt;Trucs et astuces&lt;/a&gt; &lt;br&gt;&lt;/p&gt;
&lt;p&gt;[Note: Article en cours d’écriture, il n’est pas encore finalisé. Merci de votre compréhension]&lt;/p&gt;
&lt;p&gt;Cet article a vocation de tutorial et de support de cours pour apprendre les bases de Unity en 2D.
Aucun pré-requis n’est nécessaire, mais il se peut que vous deviez explorer certaines fonctionnalités de Unity par vous même pour réussir certaines étapes.&lt;/p&gt;
&lt;p&gt;Il s’agira de développer avec Unity un jeu de ballon, prétexte pour apprendre des notions clés tel que :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L’initialisation d’un projet&lt;/li&gt;
&lt;li&gt;La configuration d’un environnement de développement&lt;/li&gt;
&lt;li&gt;l’importation de sprites&lt;/li&gt;
&lt;li&gt;les scripts pour manipuler les entités (camera, personnage)&lt;/li&gt;
&lt;li&gt;le rendu de sprites animés (via script et via Animator)&lt;/li&gt;
&lt;li&gt;le moteur physique 2D&lt;/li&gt;
&lt;li&gt;les règles du jeu via scripting&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;installer-unity&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#installer-unity&quot; aria-label=&quot;installer unity permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Installer Unity&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Télécharger et installer &lt;a href=&quot;https://public-cdn.cloud.unity3d.com/hub/prod/UnityHubSetup.exe&quot;&gt;Unity Hub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Depuis le hub, installer la dernière version stable de Unity (Installs &gt; Add &gt; Latest Official Release)&lt;/li&gt;
&lt;li&gt;Dans les modules,&lt;/li&gt;
&lt;li&gt;installer Visual Studio Community 2019 si vous souhaitez l’utiliser comme environnement de développement (IDE). Nous utiliserons plutôt Visual Studio Code (VSCode) pour la suite de ce tutorial.&lt;/li&gt;
&lt;li&gt;installer les platformes pour lesquelles vous souhaiter compiler votre projet, au moins une, par exemple “Windows build support” si vous êtes sous windows.&lt;/li&gt;
&lt;li&gt;Télécharger et installer &lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;Visual Studio Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Dans VSCode, installer les extensions “C#” et “Debugger for Unity”&lt;/li&gt;
&lt;li&gt;Créer un nouveau projet depuis Unity HUB (Projects &gt; New &gt; 2D), choisir un nom et un dossier de destination&lt;/li&gt;
&lt;li&gt;Dans Unity, configurer votre éditeur de script externe pour être VSCode en installant le paquet “Visual Code Extension depuis le package manager”.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/876f79ba8fada11b915cd5e3a7258d60/91b29/package_manager.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 41.21621621621622%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAIAAAB2/0i6AAAACXBIWXMAAA7DAAAOwwHHb6hkAAABnUlEQVQY00WQW08TURCA9+e0D03TC+7lXPacnu52Wy5RUX+A0Qd+lolvEtkAofSSkG3UlC2aKKBGHiS2od1u2+wC6i4h0ekC4XuYTGbmO3My0vuDw+Mfp2PP+xtFl5e/Pc/rdDqO47RarUaj0Ww2IanX6zt3QL6b0G63JXvjbTCdjM4GF8Fs5nvdD++EENVqtVgsZjKZhYRcLlcoFPL5POTZbDaVSqXTaehKr9c3j07HX3/5J6Pzn9Oo7nTL5bkMT2iaRilFCFmWZZqmrjPOOSEE6qqq6kyXXr3Z6n7r7x18/9IPTiZX244rSiXDMKAtyzKMgl8xy0zHhGA5QVEUiFCXdra3xmcD+PCfi+Dfdfyp53IOsgkWjEHEoItHWKxqiIKlJNzKG7Y9HI58fxKEYRRf7bv7OsUlzjDSFHkBIxUWispjwpcQwqpyz1y2bXs0HPq+H4ZhHMdur8eNRcNaIcxUUAnpFcrEYq2yvFRjjN3sBB4kzOXgFpAj9+Nn8fBl9ela7dkaX3lOl18w6wklGK6lzs+kYowpITpjmOD/CCXhD5KbTXEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;package manager&quot;
        title=&quot;package manager&quot;
        src=&quot;/static/876f79ba8fada11b915cd5e3a7258d60/fcda8/package_manager.png&quot;
        srcset=&quot;/static/876f79ba8fada11b915cd5e3a7258d60/12f09/package_manager.png 148w,
/static/876f79ba8fada11b915cd5e3a7258d60/e4a3f/package_manager.png 295w,
/static/876f79ba8fada11b915cd5e3a7258d60/fcda8/package_manager.png 590w,
/static/876f79ba8fada11b915cd5e3a7258d60/efc66/package_manager.png 885w,
/static/876f79ba8fada11b915cd5e3a7258d60/91b29/package_manager.png 983w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Suivre la manipulation suivante pour configurer l’éditeur externe dans “edit &gt; Preferences &gt; External Tools”.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/c16734a2ca61751b0dad79d60c1d4993/configure_vcode.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h2 id=&quot;linterface&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#linterface&quot; aria-label=&quot;linterface permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;L’interface&lt;/h2&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/a81a2870a2a69f9527e81e74b8ab317a/2093e/unity_interface.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.10810810810811%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACEElEQVQoz42Sa28SQRSG9zcYW41QYS/sssvusldm792l5RZ2WraFINqmMbGYELVGf4MRFhELCfWL/9WzYE0/+MEnk8nJzLznvDNniG/T2Zev03SWrm9v734s18vl4vtiPp8vtqRp+ieYz6ez9NdP4G61Wq3X681mQ0Qibwi8JIlGhTELT0QqlyvmHj/bKwmMWlOf0wf7ub08dZDP7zNPH7Vqqm4YsiwriqJpGuG57qHrAOUqx0gMK7OWKxx1w5NhLxn18DCxW01WYvgqx4m0F/nNZvNwi+/7hG3byLKQhViJZSp0kadxrAxf4biP8QDjftweDiuOT/HFQrnoRR6IXdf1tmRi669YpPMcfXGujS7i08Hp2egMn7UHb95WjxOSy5MChRzU6XTq9TpUDoKAQLvKCJXEEl2hSZ62fTl5AWVPuuddcH45fi2YGsWTJE+atolj3Gq3wjAEPRFa6AiZHkKszJFCkRJIUqCrltLAjbgfh+2wrHLgGfIWygXkoqSXgLjRaERRRGDXObaQYztgSdbk3RBkQTEU27NFRSyLvCBXBClbcf3stu49xMury3efbq4n48n7yeTD5Gp8ffPxM1jSNWiKUTNrJmBko7YFPYAA957vZSkDHwLH8/wgABm0UdchQzbvgBXIYz2AgLfKOq5qqqpqWyAw/gXooTL8CPseQjf03YbyH8CxnanMl2H+BiMXsZdoHQssAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;unity interface&quot;
        title=&quot;unity interface&quot;
        src=&quot;/static/a81a2870a2a69f9527e81e74b8ab317a/fcda8/unity_interface.png&quot;
        srcset=&quot;/static/a81a2870a2a69f9527e81e74b8ab317a/12f09/unity_interface.png 148w,
/static/a81a2870a2a69f9527e81e74b8ab317a/e4a3f/unity_interface.png 295w,
/static/a81a2870a2a69f9527e81e74b8ab317a/fcda8/unity_interface.png 590w,
/static/a81a2870a2a69f9527e81e74b8ab317a/efc66/unity_interface.png 885w,
/static/a81a2870a2a69f9527e81e74b8ab317a/c83ae/unity_interface.png 1180w,
/static/a81a2870a2a69f9527e81e74b8ab317a/2093e/unity_interface.png 1858w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Les onglets manipulés fréquement sont :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;La hiérarchie&lt;/strong&gt; : va de paire avec la scène. Dans Unity on manipule des objets &lt;code class=&quot;language-text&quot;&gt;GameObject&lt;/code&gt; qu’on peut hierarchiser dans la scène. un objet peut avoir des enfants et être situé dans un parent. Lorsqu’un parent est déplacé, redimensionné ou tourné, alors les objets enfants subissent la transformation relative à leur parent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La scène&lt;/strong&gt; : Les objets ayant des composants visuels sont affichés sur la scène. Ils peuvent être manipulés (déplacements, etc.) via les outils de la barre d’outils. Les objets n’ayant pas de composants visuels sont également manipulés mais ne peuvent être sélectionnés que via l’onglet hiérarchie.
Il est fréquent d’avoir des scènes différentes pour différentes étapes du jeu et de basculer d’une scène à l’autre via des scripts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le jeu&lt;/strong&gt; : Lorsqu’on clique sur le triangle “lecture” en haut de la scène, Unity démarre le jeu et bascule directement sur l’onglet “jet” qui affiche le rendu final du jeu. Ce rendu est celui de la (ou des) caméra(s) configurée(s) dans la scène.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L’inspecteur&lt;/strong&gt; : c’est là qu’on peut modifier les propriétés de l’objet sélectionné (qui peut être sur la scène/hierarchie ou dans la vue projet) et de ces composants. C’est également là qu’on peut ajouter à l’objet des nouveaux composants. Un composant est un script qui hérite de &lt;code class=&quot;language-text&quot;&gt;MonoBehaviour&lt;/code&gt; et qui enrichit l’objet de nouveaux comportements. Certains sont fournis par défaut avec Unity (par exemple &lt;code class=&quot;language-text&quot;&gt;SpriteRenderer&lt;/code&gt; pour afficher une image) et il est souvent nécessaire de créer des composants personnalités (via le bouton “Add Component &gt; New Script” de l’inspecteur).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le projet&lt;/strong&gt; : Rattaché au système de fichiers du système d’exploitation, c’est à dire au dossier du projet, c’est là qu’on ajoutera toutes les assets (images, sons, scripts, etc.) qui serviront au fonctionnement du projet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;La console&lt;/strong&gt; : C’est là qu’apparaitront les erreurs de compilations et les Exceptions non capturées lors de l’exécution (runtime). A consulter lorsque tout ne se passe pas comme prévu.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;afficher-un-sprite&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#afficher-un-sprite&quot; aria-label=&quot;afficher un sprite permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Afficher un sprite&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Ajouter une image (glisser déposer) depuis votre exlorateur de fichier vers la vue projet OU créer le fichier image dans le dossier &lt;code class=&quot;language-text&quot;&gt;Assets/&lt;/code&gt; de votre projet.&lt;/li&gt;
&lt;li&gt;Dans la vue projet, sélectionner l’image puis regarder l’inspecteur: il affiche les informations d’importation de texture.
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 375px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/bb3b3698ec16d912bf01eacbe7244de2/5ff7e/sprite_importer.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 149.32432432432435%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAIAAACjcKk8AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAC7klEQVQ4y42U2XLaQBBF9TNxloKwIwwYLIFAQuxgE7Y4FMX//4LP6EpTwrzkPkzN0rf3HieI14u3c7zeh8tdx49+/Pz1LcHT05NW8P0e3FSr1UKh4Lz6vXgRheFoGk/G42Aw8AeDQRAEnuexDodD3/fb7fZzBtd1uZlMJlEUOd7Im/+Zv/recIBkKg1Nq7kKgl6v95Kh0+lwczgc1uu103pudV+6LeCaBd2yg4VGo9FsNlnZ6wmw6Xa77+/v8/ncqdfr6LO6RYODzTiOwzCMEoxGo9cM/X4fAwg7KOZBz4hyJfJmszkej28JsIOTkxzQO5vNjGXCgIMzsm8icF0scNPJwP7lHginlgVcxabIi8Xi4+ODFadkLcqB43Q6NZbRgcOcx+MxfEJCBZZRXywWfz+gVCppY8iYQhl8yBSZZChhu92OgnkP4BIxPDVkpEXGEzZESCw4QjHw4pGMAB2GTErGJprwH628cUk+t9stKjAyzEH9Q0TEZcjUFia32IHPygMWKAbuyE+BfV4gtax+RoXtSjTKt2YG9kgSGk6xpjGrE/NywPapBXnF2/1+T2PTPwTlcGurp/ZqJUAXetHi5sCxmqFWqzmccZUYWGkjkTV3Crh/D9vhJmZVRb1KqNDwBY209O12Y1WEX0AVV6uVIStV2EGftUxjau54HSewXcyN6mfIZL+bgAorYMi6Yc+lNLYzEHC5XK5UKulUEaG6Gp/VsGoVVJMY7GCAjbLIEbG0w/CWMJhYEq6pYLXxI0TYHNmglFdioS5sHPSpjeEr7SiGzPF6vfIlqOE1gwLZISNmJEWm4pwRxT5vOMnxcrnQDFThMduac0NGGhoHNamCh/M3AXo1cBZEARmThkwZqMpyucR55YaQ2FPnfwnO53PePmSEWQ0Zm6jnjH04aGWPcbwIE2DE/uHaaIRMtpGzP4ZqhoQmwdZW36AmhKPawdGf/mWk7DeYHwk4p9OJLOA5sRBp+hm0/gOIySk81Vf5CRP0yBaVIHsvAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sprite importer&quot;
        title=&quot;sprite importer&quot;
        src=&quot;/static/bb3b3698ec16d912bf01eacbe7244de2/5ff7e/sprite_importer.png&quot;
        srcset=&quot;/static/bb3b3698ec16d912bf01eacbe7244de2/12f09/sprite_importer.png 148w,
/static/bb3b3698ec16d912bf01eacbe7244de2/e4a3f/sprite_importer.png 295w,
/static/bb3b3698ec16d912bf01eacbe7244de2/5ff7e/sprite_importer.png 375w&quot;
        sizes=&quot;(max-width: 375px) 100vw, 375px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;En projet 2D la texture est automatiquement configurée de type “sprite (2D and UI)“. Pour texturer un objet 3D on utiliserait “default”. Les autres modes sont pour des usages avancés (vous le saurez quand vous en aurez besoin).&lt;/li&gt;
&lt;li&gt;“PixelsPerUnit” Indique à Unity quelle sera la densité de pixels à utiliser par rapport au système d’unité du moteur. Unity est un moteur 3D, et comme la notion de “pixel” n’existe pas dans un espace 3D Unity propose un système d’unité de référence. Ces unités sont totalement arbitraire (on dira “une taille de une unité” ou “une taille de un”) mais permettent de garantir la cohérence des proportions entre les assets quelle que soit la position de la caméra et la résolution finale. Nous n’apprendrons pas à afficher un sprite en rendu pixel perfect (1px du sprite rendu sur 1px dans le rendu final), si vous souhaitez le faire voici un tutorial : &lt;a href=&quot;https://blogs.unity3d.com/2019/03/13/2d-pixel-perfect-how-to-set-up-your-unity-project-for-retro-8-bits-games/&quot;&gt;https://blogs.unity3d.com/2019/03/13/2d-pixel-perfect-how-to-set-up-your-unity-project-for-retro-8-bits-games/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Si vous utilisez du pixel art, passer le “filter mode” en “Point (no filter)” pour un meilleur rendu.&lt;/li&gt;
&lt;li&gt;Depuis la vue projet, glisser déposer l’image vers la scène. Celà créera automatiquement un &lt;code class=&quot;language-text&quot;&gt;GameObject&lt;/code&gt; avec un composant &lt;code class=&quot;language-text&quot;&gt;SpriteRenderer&lt;/code&gt; configurer pour afficher votre image.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;autres-exemples-courants&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#autres-exemples-courants&quot; aria-label=&quot;autres exemples courants permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Autres exemples courants&lt;/h3&gt;
&lt;h4 id=&quot;sprite-de-fond-avec-répétition&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sprite-de-fond-avec-r%C3%A9p%C3%A9tition&quot; aria-label=&quot;sprite de fond avec répétition permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sprite de fond avec répétition&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/479f4eecea674823972c896d6716f693/4b446/sprite_tiledbackground.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACf0lEQVQoz3VS227aQBD150RpAja+4tv6buxdeykYTGkSIGlFI1FVitTfTH8ihTRKXtKnhDz02Eh9qXq0Hs/CXM4cj/Dj9na33T08PGy3u1/39z/v7u53sNunp6ffz89v+7cD9vv96+srLHw4Ly8vj4+Pwreb76tP67Ozs/l8fnGxWC2Xl5eXq8VitVpdXV1VVbVogYD1er1cLuGcn59ftBDCKHaJ1+2Kx8fHqqZGSWRYhk2cKI4sxzJt0yGu3tf7Zj8IAtuxNU07OjqSJIkQIuiqMizZaFi6tuWHhE0KPi7KccEqxuthWfPhpBzWPOMZcV1KaVEUSINTlqUg20k0XhTzz0YyspKcVcWiLqfTIh+zzc3XouYfquG4fh/ROPD9IPBVVdVaWJYl9BRj8PFLxD+qJnHjuJgwNmG0onRMi0nBxpRWZTHlCUuiKAZz0zRFUex0Oo7jCGK3M8jzOI41RXY9G2yRlo9wcjgUdgQ6LKFJGEaui/oxFIV4nHNBFCVd1w3D0DSd+ITXvDlTXk5LPmssSpR1GdPY932rxfX19WazaWYepKlt25bVyChKoqqrOLIqK5qCA9/1XddzHQKaDiL7LTA5fCFLA8byIAz9wDctE3/gUWRZUWAa69gO5gQ1iBxFEUqMRiPGGPgLjuOCQJZlSZEMaEqIlxDCg1DXNeRgol6vd6jSxCRYCpLlFJlpmgp4DQYDz/PCJHQJ1sJCF6uRQEPmoT+AEohBPib3fB8sIJ6AOzYOJeSejL3ptZDaboec5ipJGBKbizZBK5vR74dhKKA7thq//v36/wIUoMVsNkOPrEXYQuh2u+B2enr67v9ADOzJyQkaHMQDHVz/AILcExTZIHMyAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sprite tiledbackground&quot;
        title=&quot;sprite tiledbackground&quot;
        src=&quot;/static/479f4eecea674823972c896d6716f693/fcda8/sprite_tiledbackground.png&quot;
        srcset=&quot;/static/479f4eecea674823972c896d6716f693/12f09/sprite_tiledbackground.png 148w,
/static/479f4eecea674823972c896d6716f693/e4a3f/sprite_tiledbackground.png 295w,
/static/479f4eecea674823972c896d6716f693/fcda8/sprite_tiledbackground.png 590w,
/static/479f4eecea674823972c896d6716f693/4b446/sprite_tiledbackground.png 877w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Particularités :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Draw Mode: Tiled (préciser le nombre de répétitions dans Width et Height)&lt;/li&gt;
&lt;li&gt;(Configuration d’importation de l’image) Mesh Type: FullRect&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;forme-géométrique-de-base-ex-hexagone&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#forme-g%C3%A9om%C3%A9trique-de-base-ex-hexagone&quot; aria-label=&quot;forme géométrique de base ex hexagone permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Forme géométrique de base (ex. hexagone)&lt;/h4&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d6eaf6f2f13ff113dd859966bd8a8901/4b446/sprite_hexa.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 75%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAIAAABr+ngCAAAACXBIWXMAAAsSAAALEgHS3X78AAACyUlEQVQoz2VSyU7bYBD2syQOiR3HS7zbsX873pfYcTZaEpI4pVCVQ4XU10AqZ8Qj8Cr0JSABBBd6Yjl0Auqpn+zRzK+Z+WbDfl9dbdab+/v79Xpzd3t3c319u7m9uV4/Pj7+eXp6e33b4nWLl5cXkGCB8vz8/PDwgP04+VkeHM1ms729vcVisVwuVquyXC7LZbn6shqNRot3gMPR4deyLEHZ39+HF5CY47gIWQzDkCTJ84LneaqqdnTddVyjY4BuGIYsiaqBukne0VRZUQiCYFkW3jFJlvI8K4oCjCAK3NBxI7+YjONe5IXeYHeYjQa9LA1CMKPxeDydTqMomkwmw+EQY2g6iJIsL4BHN/UaXSM4QutqZJvEKVxGcm+cxb3Y6XZtC/meDxy6rpumaVkWxjJ0tLtw4kJVoFyt1sLxZrVCVKpNHKd2IEU6SuM0sh03jCLHcXieVxRFEAToCGNblJ8NvN4Y0gkSX2niO3RDMsQ6U6+SFYIl/CxI89Rxfd8PYSK+HyCEgBwSYbTi+bsH/dWJ3V9SEC03ZlN/VJbxp8+UxOJUDafruqm5jmPbNnDCjAzLhAa3wUGSIS/uhj2jG1I02+ZITeN5SRQ1lWS5emOH4zlB5KFV8HZdF5R+vx+GYZqkWOijNApshDRV0TXNNJAgiAJ01m5DBqAyzO2EdF0LggDKNhGKkxSyJEmCdSBTUYC8uLg4+3XG8ayqq+Xq4NvRd1bjGIPJetl8vt9iuSCI0iTpvgNGvS3b9704jmF0x8fHcEAK8He0PO8X/YGoirIhW5YdhaGi67aLoOA03cabJgKJwQ8bh71dXl6en5/DnYmCyLxD4AX4OI5rtVpAtjqcZ1nWz/MPWtAxKH0+n0MzEHl6ekrTtCzLEuBD/gOsZzFfABN0C0sDEyQGicEbYqrVKg53QVHN/wBVNEmSIBptmKIkwYV8lPYXHYsSjOaKK1oAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sprite hexa&quot;
        title=&quot;sprite hexa&quot;
        src=&quot;/static/d6eaf6f2f13ff113dd859966bd8a8901/fcda8/sprite_hexa.png&quot;
        srcset=&quot;/static/d6eaf6f2f13ff113dd859966bd8a8901/12f09/sprite_hexa.png 148w,
/static/d6eaf6f2f13ff113dd859966bd8a8901/e4a3f/sprite_hexa.png 295w,
/static/d6eaf6f2f13ff113dd859966bd8a8901/fcda8/sprite_hexa.png 590w,
/static/d6eaf6f2f13ff113dd859966bd8a8901/4b446/sprite_hexa.png 877w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Particularité :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créé depuis la vue Project via “clic droit &gt; Create &gt; Sprite &gt; Hexagon”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;animer-un-sprite&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#animer-un-sprite&quot; aria-label=&quot;animer un sprite permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Animer un sprite&lt;/h2&gt;
&lt;p&gt;Deux méthodes seront présentées ci-dessous pour animer des sprites: avec un script ou avec l’outil Animator de Unity.&lt;/p&gt;
&lt;p&gt;Pour toutes les méthodes : créer un sprite multiple à partir d’une image spritesheet, extraire les séquences en sélectionnant les images voulues dans l’onglet projet et en les déplaçant vers la scène.&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/ab3bf2e1d156653c30504525dcbc0ab6/Unity_create_animated_b2viup.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Image de référence pour le sprite :&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cb0eedb1e27ff1f5cbb5083da1926ef4/5fd3e/girl.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 87.16216216216216%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAAEZUlEQVQ4y42TW1AbVRjHD6UUOwMMtgjVtCqUMiiCQOSSCwESkk12c9tcNySbzeYKhAANICaFUGgCbaQC5RIqBcKtKFPBS51O1fHNl8744IMz8uBl+q4zztQ3xzXnWJzO+OL3sr9v/2fP+b7/fgdYJa0X0gbP53cwGgOZWCFdNzcJNg75us6m3tJ61nw8fp5DLS/e0Hu2Uu22NqilSGZmE3ddgRxXU/4dnfdezxuSEkCWtlSuB5zcar+NhOKsjfppPeT4DPJV3DC9FXRxMkfJKcOrkvLdHi+30mOjoHaTsj7eCNGfQI5iutvpXvo3wetVBaCXwc8k9ObZmEBdAcWExRydkhu9kK84tbXXtGQf4jEyP04ab1wV6S7BfMpiGZmWmxnIk4xBksDN17vOCnOAsxr3H/qD3F0f4wAg94VFo/PJvS7vQ7gwJjdt77N+zi9uOquvaGl60N3PpV10D9QWjfY/9rzub1HLuGnm01A356gT8ICEdzE/yhCxsVG6BIphs8wR67NIIUf0hG2qS7sKWVlacyHm1m2Px7SlMB+wSKMTAwbUfkAuFk/2m3ohA7pZWbVh8nyfUlNWmC8ZXB+mjS60ybSadt/F/NssKH+OacVb1zH3wVqjXQSywcll3LW6LWFHkNcaa11a7DWOVHcUAFeVUrDip7k7I/YOKCYpy+O1y3Qa8phKn9zLtGKX8fOtFZLqvWA3t9bFIt/m7I4fd/r995E1mPn+vsfHGWveOo+qNHdTBeBpUEFVHngmXqOlxcdsZBUXgYafjflfPjlDOoIxghKgURvqLH5vWKvJYDbAM40OSdtkAyI1D5WvJBoSBnk9qhajWvY9nlHI7ma1Pk16j3YIRiUq5Vce+gLcstWMfKsr5vMmpdQ3H7PuX8HABDgxJlcu6WsU5VAcV2uuXSaFTvRTFHLTLcr8JWT9pbb6dR99tOyxEDCfcOsiySCjeFr8qTGDduODkD2Bsi4hiaU17rcX6vC8wnNlRStqNjLVqG2YtFrWD4ZGjlwKQV5QIXN+NDjEpcNBMiJSvfm+nl0f9Kuep2SiM6s6ZvUW889BKMJS3YPMTHEbfWSltRZjd1kft2A3JyMaZSI96P75dmrpNM0XYishxw+Hs+80UWXChgWG+n1+hA1nPs9NksZHi/3MF0qD4TTacIKV88YDeBXkBvX5E6MM1nx8GCHAi4451m6QOBXSQuS1UFszYbIKIetAWV6kjeCjRXPazs2Umz5E91NGiVbs9q/jYT/yM0VQYlv+i7no6rUqi95tt/4Vadd2oh8mM3830WpEY5Nst3huyKx/VlS+lA8CAjweNeloKHSL1UxUpV87WA0X2njEuSVz58OEx+JAJ3MAhJT4XEiuqEa+Y/KeXqXKDblHo6jqw1Tz/3o4L6F24zgpeXb+esXdJ+DzyaOvcue6hrPA/w2GaM6JyvS/DKuUqJVZuyUnzrr/s8FowAA8vMassLADcByH3skKX0HrXLX1oL+yLctBtIC/AWyRdNFMoZK9AAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;girl&quot;
        title=&quot;girl&quot;
        src=&quot;/static/cb0eedb1e27ff1f5cbb5083da1926ef4/fcda8/girl.png&quot;
        srcset=&quot;/static/cb0eedb1e27ff1f5cbb5083da1926ef4/12f09/girl.png 148w,
/static/cb0eedb1e27ff1f5cbb5083da1926ef4/e4a3f/girl.png 295w,
/static/cb0eedb1e27ff1f5cbb5083da1926ef4/fcda8/girl.png 590w,
/static/cb0eedb1e27ff1f5cbb5083da1926ef4/5fd3e/girl.png 594w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;option-1-animer-à-la-unity&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#option-1-animer-%C3%A0-la-unity&quot; aria-label=&quot;option 1 animer à la unity permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Option 1: Animer à la Unity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Configurer le Controller au niveau de l’Animator qui a été ajouté automatiquement sur un des game object créés, ajouter des transitions basées sur des propriétés pour basculer d’une animation à l’autre.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/1ebe51d17d8be9209ef7426d0601d923/Unity_controller.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Utiliser un script pour modifier la propriété du controller.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/c79d3e415e77445ffe30f0d6b9cf6929/Unity_animate_script_zwunac.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h4 id=&quot;animategirlcs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#animategirlcs&quot; aria-label=&quot;animategirlcs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AnimateGirl.cs&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;UnityEngine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;RequireComponent&lt;/span&gt;&lt;span class=&quot;token attribute-arguments&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression class-name&quot;&gt;Animator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AnimateGirl&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;MonoBehaviour&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token class-name&quot;&gt;Animator&lt;/span&gt; animator&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        animator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Animator&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GetKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;KeyCode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RightArrow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            animator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;SetFloat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Speed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            animator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;SetFloat&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Speed&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;option-2-animer-un-sprite-via-script&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#option-2-animer-un-sprite-via-script&quot; aria-label=&quot;option 2 animer un sprite via script permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Option 2: Animer un sprite via script&lt;/h3&gt;
&lt;p&gt;Personnellement, j’évite le plus possible d’utiliser les Controller et Animator de Unity pour la 2D: ils apportent énormément de complexité pour simplement faire défiler des sprites. Aussi je préfère écrire moi-même un script qui va venir modifier les images du SpriteRenderer à fréquence régulière pour créer l’animation.&lt;/p&gt;
&lt;p&gt;Je crée un script “SpritesheetAnimator” qui s’occupe d’accepter une configuration de séquences pour un gameObject et de modifier l’image du SpriteRenderer Associé, et un deuxième script comme précédemment pour piloter l’animation en fonction du gameplay.&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/e2e3e0b09e6226a5b9537c47a4aff8a6/Unity_animate_spritesheetscript_qexv4u.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h4 id=&quot;spritesheetanimatorcs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#spritesheetanimatorcs&quot; aria-label=&quot;spritesheetanimatorcs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;SpritesheetAnimator.cs&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;System&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Linq&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;UnityEngine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Lister toutes les animations possibles ici&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Anims&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Iddle&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Run&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Roll
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Structure de données pour définir une animation&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Serializable&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AnimDefinition&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Anims&lt;/span&gt; name&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Sprite&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; frames&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// L&apos;animator va changer le sprite du SpriteRenderer à une certaine fréquence (par défaut 25 fois par secondes)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;RequireComponent&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression class-name&quot;&gt;SpriteRenderer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SpritesheetAnimator&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;MonoBehaviour&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;Tooltip&lt;/span&gt;&lt;span class=&quot;token attribute-arguments&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;animation speed in images per seconds&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt;&lt;/span&gt; animationSpeed &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;25&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AnimDefinition&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;/span&gt; animations&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// accessors (getters)&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;AnimDefinition&lt;/span&gt; CurrentAnimation &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; LoopCount &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; loopCount&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt;&lt;/span&gt; animationFrameDuration &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1f&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; animationSpeed&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// private properties&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SpriteRenderer&lt;/span&gt; spriteRenderer&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AnimDefinition&lt;/span&gt; currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; currentFrameIndex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// durée en seconde avant l&apos;affichage de la prochaine image&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt;&lt;/span&gt; nextFrameCoolDown&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// nombre de fois que l&apos;animation est jouée complètement&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; loopCount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        spriteRenderer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;SpriteRenderer&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        nextFrameCoolDown &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; animationFrameDuration&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        currentAnimation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; animations&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frames&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// déclenche la frame suivante si le temps est écoulé&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;nextFrameCoolDown &lt;span class=&quot;token operator&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token function&quot;&gt;AnimateNextFrame&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// si on change la vitesse de l&apos;animation, raccourci le temps d&apos;attente si nécessaire&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;animationFrameDuration &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; nextFrameCoolDown&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; nextFrameCoolDown &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; animationFrameDuration&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token comment&quot;&gt;// écoule le temps avant la prochaine image&lt;/span&gt;
        nextFrameCoolDown &lt;span class=&quot;token operator&quot;&gt;-=&lt;/span&gt; Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;deltaTime&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;AnimateNextFrame&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// calcule l&apos;indice de l&apos;image suivante&lt;/span&gt;
        currentFrameIndex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currentFrameIndex &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;%&lt;/span&gt; currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frames&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// affiche l&apos;image suivante&lt;/span&gt;
        spriteRenderer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;sprite &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;frames&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;currentFrameIndex&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Ajoute un temps d&apos;attente calculé à partir de la fréquence de l&apos;animation&lt;/span&gt;
        nextFrameCoolDown &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; animationFrameDuration&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// compte le nombre de fois que l&apos;animation a été jouée&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currentFrameIndex &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; loopCount&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Play&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Anims&lt;/span&gt; nextAnimation&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// Si l&apos;animation est déjà jouée, on ne fait rien&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;currentAnimation&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; nextAnimation&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// trouve l&apos;animation correspondante dans la liste&lt;/span&gt;
        currentAnimation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; animations&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;First&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;name &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; nextAnimation&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// réinitialise à la première image de la séquence&lt;/span&gt;
        currentFrameIndex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        loopCount &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 id=&quot;animategirlspritesheetcs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#animategirlspritesheetcs&quot; aria-label=&quot;animategirlspritesheetcs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;AnimateGirlSpritesheet.cs&lt;/h4&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;token namespace&quot;&gt;UnityEngine&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;RequireComponent&lt;/span&gt;&lt;span class=&quot;token attribute-arguments&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;typeof&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token type-expression class-name&quot;&gt;SpritesheetAnimator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;AnimateGirlSpritesheet&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;MonoBehaviour&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;SpritesheetAnimator&lt;/span&gt; animator&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Start&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        animator &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;SpritesheetAnimator&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Update&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GetKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;KeyCode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RightArrow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            animator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Play&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Anims&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Run&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Input&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;GetKey&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;KeyCode&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DownArrow&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            animator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Play&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Anims&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Roll&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            animator&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Play&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Anims&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Iddle&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&quot;le-debugger&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#le-debugger&quot; aria-label=&quot;le debugger permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Le debugger&lt;/h2&gt;
&lt;p&gt;Debugger (déboguer en français, peu utilisé), permet d’inspecter le code alors qu’il est en train d’être exécuté par le programmes. Avec Unity, votre outillage VSCode (avec les plugins installés précédemment) vous permettent d’utiliser directement cette fonctionnalité.&lt;/p&gt;
&lt;h3 id=&quot;1er-cas-le-fichier-launchjson-nexiste-ppas-dans-le-projet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#1er-cas-le-fichier-launchjson-nexiste-ppas-dans-le-projet&quot; aria-label=&quot;1er cas le fichier launchjson nexiste ppas dans le projet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;1er cas: le fichier launch.json n’existe ppas dans le projet&lt;/h3&gt;
&lt;p&gt;Pour le configurer (première utilisation uniquement), accéde à l’onglet debug (1) puis créez un fichier launch.json si proosé (2).&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 307px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/994f865233ba43cb07394b6b90fea4fd/4651d/vscode_enable_debug.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 114.1891891891892%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAXCAIAAACEf/j0AAAACXBIWXMAAAsSAAALEgHS3X78AAAEJklEQVQ4y3VU22scZRTfP0IRBJOuZnOdjTWXbZobNEIIGh+E2sSWpO0mUSr40tI+CeKLDz6JGFSKVNQHUREfFKuooblgbaLNttnL3O8zOzu7c7/tZpPxzGyCoPRw5nDOfN/v+853vt/5Erv50td3i3kUf/ggVygUSJLM5/PgUBQFFvxisVgqlQiCQFEUQgzDwG/NTGzj4jt3JEHVCvm9jc1NGFtfX9/Y2IAZW1tba2trrRCWyOVyEO7s7MAc+AMLJa5fu3rj2tUrV95YXV21bVtV1VqtVlXVSqUCfrUKbiT/CUE0TUskk89khk91dnZcOH8+DEMOhOUsy3YeIbCBrutgG41G4rmhzOwLs8NDA8srKwCGbXVNt2wb8I9QSzcM07R8P0gg6fT42Hgq1ZnNXj5sNmkSJwlSr9U8F3axXMf+v7aG6nUAI0gfgrS1PbVwKavY9Z09dOt+gZSqoubwVUsArdnH+q/PVS3NCRK9vb0jI6dP9qfnFrPOfgiLBkEAJzYsy7Bs03ZADcsxHTf23Ti0YVS24p2npp4fOPns/GI2aIY4p/xFyLhQZcraNiqzgoShaFRDhmZZhiQwRVFc13UsSwFwf3//wMBAsr1tfnEpOAhphtstEDQnkiyH0zzLgUbSuir4oFpWdGSrDOA+EARJJpMA9pthWeAElmIpHCvmFZGvSGJNLUs867tOw/fqvlv3HPDhNiJwOt0/dnqk+8ST8wuXAcxVdKxs4mWjJBmoHNmSpGOyURS1gqCVRA2VdFzWraO0kb6ZVxa6z904e+n1xkH47d/Cu78y79/hPrsn3vxD+PSueOueeOtP8fNtCfSDDf69NfbDTV43zIoN4N7ukRfn21/76OzSm/XmwSZe+ea+/P2D8u2CcrtQ+bkY6U8F5Zdi5XdU/WFP+S4n/7inGGa8czqd7u2BrJ+4sJj19kNL11o0iIhgt0pjgXfsHNHm6MxdXV0TkxOpNDJ7cTk4DAUObkeGfoSuokiCoXCWoSEQJBHFcV2r1X0vrlcMHhocuv72WzcnJ3+bnjG9QBR4AscpkqR5EeWUHCFQolriFBJjCJzFBBXnK6KqAz4Cj42Ovbqy/NXjj9XHJ3TTxBmBoBiWYVhBpmUN5VVO0eiybmRGjZdexnQPY8py1TgC9/T0PN3R0Q4kubjkHYYPCRETq74fJee5dgAWShD4jU8+rn/5hXew70dnPiYJMCyTyaQ6U+eAJMBt24RVo4rEctzFrn1waDeb8AO4GY/E4MHB4Znp6fGx0bmY23m6vEsphKBSFBmRmSQZhoHXC/qUxDB4jHCcAIbC6rLpRww7c2bq1PDg3EIWGCZIEkYyJZzieY6Ihef51gMUPU9VVZIkeAqOwEhEbeREfOaI25LAc0xUcIqiaegkVhCEKG/opNi6rhdnHaX9D2YjNwDr1XmlAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;1. ouvrir sur l&amp;#39;onglet debugger, 2. ouvrir sur &amp;quot;create  launch.json file&quot;
        title=&quot;1. ouvrir sur l&amp;#39;onglet debugger, 2. ouvrir sur &amp;quot;create  launch.json file&quot;
        src=&quot;/static/994f865233ba43cb07394b6b90fea4fd/4651d/vscode_enable_debug.png&quot;
        srcset=&quot;/static/994f865233ba43cb07394b6b90fea4fd/12f09/vscode_enable_debug.png 148w,
/static/994f865233ba43cb07394b6b90fea4fd/e4a3f/vscode_enable_debug.png 295w,
/static/994f865233ba43cb07394b6b90fea4fd/4651d/vscode_enable_debug.png 307w&quot;
        sizes=&quot;(max-width: 307px) 100vw, 307px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;2eme-cas-le-fichier-existe-déjà-et-unity-debugger-ne-fait-pas-partie-des-environnements-proposés&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#2eme-cas-le-fichier-existe-d%C3%A9j%C3%A0-et-unity-debugger-ne-fait-pas-partie-des-environnements-propos%C3%A9s&quot; aria-label=&quot;2eme cas le fichier existe déjà et unity debugger ne fait pas partie des environnements proposés permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;2eme cas: le fichier existe déjà et “Unity debugger” ne fait pas partie des environnements proposés&lt;/h3&gt;
&lt;p&gt;Dans ce cas ajouter l’environnement comme indiqué dans l’image ci-dessous.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 394px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0680bf89fe4b3703fb429eb029dea666/cc097/vscode_debug_add_env.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 99.32432432432432%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAAAsSAAALEgHS3X78AAADYklEQVQ4y3WTS2/cVBTH/UnaSgihqQokbRJ7HiSTZEIFbQQbwmOHEJ8AiRUbNt3wAVixZBPEF6gqgYQAtZmZKhnPeGzPw47fb/v6MbavPebMtF0UGOvKurLP7/zP+d9zCZoXntDifD4fDoeTyWQwGIzHY9hfXV3RNA1f2PF4NBjAZjQawftFGMQwDEM8/qv34+PnvV6v2+1O+Em/1+N5bkjT3YuL/vM+kEOeuxiNptPp5eUlvPv9PmCQAuKJBx9+cL9zeHp6OplMwwiprjuTLVGzrg1nLht6lBoj3n3ym6zIfhDIsowQ8jzPsizDMIh6s9VqvddqNVmWW2TRzPEvWLXPil32+ukVL1VV8PMvi0/OppLiOI4gCAD7a1jTNKLeaGxtbTUaDSjmWhBobi7qlqyZqmkLkhplRYGLRZRYaBFHYRRFYRjGcZznue/7xL2dnVqtBjB44Dq2oJqqpuua6tgWKKiKksRRXlaGi+IwRAgWSpKkqipIRJAU2Ww02+02y7JlgZ0wlTXdMHRFVaG3siyrZZnmhemF8Up1BYMywBhjgiTJO2/fqdfrHMflWWr6sW7ajmNDS2APxgXEpbj8L5wXBcDUW2++Qe3tchwPsOGFmgl2mLpuQFy1flK8fA1el12UJVGnyNb7p83OQ3bM5FlmeJGqm1C2JEmQIwgQlJ0Vyw3K2+/c+/ybxpffjelL8NDwI0UzoGzXdQEWRBEM2wiDVTdv3qJIil/3DMqSolmmads2BPl+kMRxugk+Ozt7+PFHeyed4ZjFa8MU3YC653MB+OXLnjcY9sVXX3/72afPbt82aDrJM9OPTNuFEwbSNM00TTfBGOCD46O7N278VKvJDJNhbAeJ5Xie6/rrBzovMP5fOMMFQZHk9s7Ou+02zTCgNZU1SVGvRQHOWZFlRVF0VUHRAiYMBXA1AsgIs7UqG+B6s3l8dHS/czykh8AwUxHOEQUIrApgGiMQWSbF0kjyfyk7YUzs7e7CbNcpCoakKrHkLn6ntWdT5+nE+ZPR/h5pf8iJ+P0P2aNHqCzDVcKXsB0ggPe2727v7+/DbGdparnBTPdEMxCMYKo6M8Weocw7/zU7P0d5vtJ9BQdxQhwcHJycdA4PD+FWZVkGv+HuJXEICzarBTexwCtZ6OL1sv8BlHjgEVrzZXIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;1. ouvrir sur l&amp;#39;onglet debugger, 2. ouvrir la liste des environnements, 3. choisir &amp;quot;Add configuration&amp;quot;&quot;
        title=&quot;1. ouvrir sur l&amp;#39;onglet debugger, 2. ouvrir la liste des environnements, 3. choisir &amp;quot;Add configuration&amp;quot;&quot;
        src=&quot;/static/0680bf89fe4b3703fb429eb029dea666/cc097/vscode_debug_add_env.png&quot;
        srcset=&quot;/static/0680bf89fe4b3703fb429eb029dea666/12f09/vscode_debug_add_env.png 148w,
/static/0680bf89fe4b3703fb429eb029dea666/e4a3f/vscode_debug_add_env.png 295w,
/static/0680bf89fe4b3703fb429eb029dea666/cc097/vscode_debug_add_env.png 394w&quot;
        sizes=&quot;(max-width: 394px) 100vw, 394px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Choisissez l’environnement “Unity debugger”.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/0893fed130224feba43906d1977a01fb/ef3e1/vscode_debug_env.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 43.91891891891892%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsSAAALEgHS3X78AAAAsUlEQVQoz5WPSQ6DMAxFc/8DlW25ADdoAsQZCBlNglRWDay6qRqe/sry07cJaKtc0i4pGx3usRyxvP9nPxaPxDgPagGpudQBt5RLYyJmsiHyedZae++3O2BKpOse1jnvQ8653azL0zSRvn/WWg58XW1uppRyyoj4otSd5TcIIVBKiZSSUgYAUopwTVuIMTLGThlAVHVh4z4MhUMOseXscRyJUkoIUR++shpj1i/sb6r4AS9p90M2zM4bAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;sélectionner &amp;quot;Unity debugger&amp;quot; dans la liste des envrionnement&quot;
        title=&quot;sélectionner &amp;quot;Unity debugger&amp;quot; dans la liste des envrionnement&quot;
        src=&quot;/static/0893fed130224feba43906d1977a01fb/fcda8/vscode_debug_env.png&quot;
        srcset=&quot;/static/0893fed130224feba43906d1977a01fb/12f09/vscode_debug_env.png 148w,
/static/0893fed130224feba43906d1977a01fb/e4a3f/vscode_debug_env.png 295w,
/static/0893fed130224feba43906d1977a01fb/fcda8/vscode_debug_env.png 590w,
/static/0893fed130224feba43906d1977a01fb/ef3e1/vscode_debug_env.png 759w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;utiliser-le-debugger&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#utiliser-le-debugger&quot; aria-label=&quot;utiliser le debugger permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Utiliser le debugger&lt;/h3&gt;
&lt;p&gt;Une fois l’environnement d’exécution “Unity Debugger” sélectionner, lancer “l’attache” en cliquant sur le triangle vert à côté de l’environnement.&lt;/p&gt;
&lt;p&gt;L’outil de debugging de VSCode va alors s’attacher au debugger intégré à Unity, et vous pourrez alors commencer à mettre des points d’arrêts (&lt;em&gt;breakpoint&lt;/em&gt; en anglais).&lt;/p&gt;
&lt;p&gt;Pour mettre un point d’arrêt cliquer sur la marge gauche d’un ligne de code que vous souhaitez inspecter.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/2f8985a82460a04a312c268818f56b50/90712/vscode_debug_ex_breakpoint.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 68.24324324324324%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAAsSAAALEgHS3X78AAABa0lEQVQoz52Si27bMAxF/f/fuCDbPLQO0sjiW5Rke5SBDUO7LsCuBVg2eEnpkBMAZAAzQ0TCjBg/AOOBTIT0N83zfL/fb7fbxKIkKsLMwrA+EhAJZgZg97bv20f1X5rM63HsW9vauXoL9RqbfmzbfvxTk5Ry7Hv3DqBIzAhp5Qy63PLbA0RMrXxqLrXuYW69WFV1ERctzDrPy7fvy/Xry+vr/VOzjcrNyLv2MBOrabBTGEuQ1KtH9gjdT/25iTtbdzYvLDZqiiONoy7L2+UyX68/vlzmOEhEtzheO5H8BsZmkat5D7a1tlZL8ebnZ4Q9AXbHNV7NWwBLKzGtoUfCwBbuJ+YkOMx9lBUdpWvVUiwqH880zctLGLxE5bi4FiUgo8E84LMKRduILGcZaN+ZYwgDn2pLKYJICFLCMACWR+I1C8TkqY129v6xzzGD3WzL2UeHYBiYC3FPq645stjJ3039vdlrjXE9/ks/AVBLMHpJ+NBrAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;vscode debug ex breakpoint&quot;
        title=&quot;vscode debug ex breakpoint&quot;
        src=&quot;/static/2f8985a82460a04a312c268818f56b50/fcda8/vscode_debug_ex_breakpoint.png&quot;
        srcset=&quot;/static/2f8985a82460a04a312c268818f56b50/12f09/vscode_debug_ex_breakpoint.png 148w,
/static/2f8985a82460a04a312c268818f56b50/e4a3f/vscode_debug_ex_breakpoint.png 295w,
/static/2f8985a82460a04a312c268818f56b50/fcda8/vscode_debug_ex_breakpoint.png 590w,
/static/2f8985a82460a04a312c268818f56b50/90712/vscode_debug_ex_breakpoint.png 882w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Démarrer le jeu et faites en sorte que la ligne qui contient le point d’arrêt soit atteinte. Le jeu va alors se mettre en pause et la fenêtre se transformer de la façon suivante :&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1650944678b667ef26fe7ca2304c3cdd/afa26/vscode_debug_stopped2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 58.10810810810811%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAIAAADtbgqsAAAACXBIWXMAAAsSAAALEgHS3X78AAAB/klEQVQoz41S2W7UQBD0//8LErwkihBIEIIQEBIWpI13fa7t9TWe+/B4Zmx6E3inVOqWWmp1Vc1EyfEAPMRxWVwQP+3zPG+apjqdyrLIs+yFJUyLIru/T/bxMS/TNDnGT1FRVfQQ864TWiutGWNaazPP2hiljBRcCsa5okzARA8DnzAVCmHKKY2a+jw2I0KYECqeoZUSZnYhzMZKqTkXXGhClRDzvISwboBukMbYqO8nVKFxIJQSgvGEMezLefEhWL3M2kkJEhTjhlAzYja33eYcZqBjifKkRN9+jU1PMCWYTBOWQhBlrfNKwpYREm4axjXlhorZDGhdLJx33kd929ORTogwxsEwpRRkU22tD84GKRdzMW+lWsL6rHjboANDCBGaJg23wBmofYbRipl5ocgtVBtqLTYaGUPXILwXDujEugbnfJSdTt3uN2laJlXXdWUJAYzMKF8fBKsJrRjLJgz1TEgx4YKwSqpmXV1Vn6Mkhcdq23YcRtx2Y5adkjTX9hKr1puQXqlFSqfUyrmXyps5LMtFdpoX0bmu2q7t+749N5xRyBu+xAqyvNu2AAb/Mbz4vVheAxSExigumjrNZZII64SCSAWa8PZ/iB6uX+9uXu3fvWl/fBgeb/ufd8Puszg+nL68TT5eZXc36e1V+um6/vpexPf8L78DRfL4By5xnmttTSFVAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;vscode debug stopped2&quot;
        title=&quot;vscode debug stopped2&quot;
        src=&quot;/static/1650944678b667ef26fe7ca2304c3cdd/fcda8/vscode_debug_stopped2.png&quot;
        srcset=&quot;/static/1650944678b667ef26fe7ca2304c3cdd/12f09/vscode_debug_stopped2.png 148w,
/static/1650944678b667ef26fe7ca2304c3cdd/e4a3f/vscode_debug_stopped2.png 295w,
/static/1650944678b667ef26fe7ca2304c3cdd/fcda8/vscode_debug_stopped2.png 590w,
/static/1650944678b667ef26fe7ca2304c3cdd/efc66/vscode_debug_stopped2.png 885w,
/static/1650944678b667ef26fe7ca2304c3cdd/c83ae/vscode_debug_stopped2.png 1180w,
/static/1650944678b667ef26fe7ca2304c3cdd/afa26/vscode_debug_stopped2.png 1258w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(1) La ligne où le debugger est arrêté est surlignée en jaune&lt;/li&gt;
&lt;li&gt;(2) Une barre de navigation en haut à droite permet de controler l’exécution du programme: reprendre, avancer de une ligne, debugger l’intérieur de la fonction, terminer la fonction et debugger à la sortie, relancer le debugger (interrompt la session en cours), arrête de debugger.&lt;/li&gt;
&lt;li&gt;(3) en haut à gauche l’encart “variables” permet d’inspecter les variables du contexte en cours&lt;/li&gt;
&lt;li&gt;(4) à gauche milieu “watch” permet de saisir des expressions à évaluer et d’afficher le résultat par rapport au contexte en cours&lt;/li&gt;
&lt;li&gt;(5) à gauche en bas “call stack” permet de remonter dans la pile d’appel du programme (trouver les contextes des fonctions appelantes)&lt;/li&gt;
&lt;li&gt;(6) à gauche en bas “breakpoints” permet de gérer la liste des breakpoints actuellement acquis&lt;/li&gt;
&lt;li&gt;(7) il est possible de survoler les variables avec le souris pour connaitre leur valeur (ex: maxDistancePerFrame dans cette image)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;le-moteur-physique&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#le-moteur-physique&quot; aria-label=&quot;le moteur physique permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Le moteur physique&lt;/h2&gt;
&lt;p&gt;Pour le vocabulaire et les notions clés :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://teachings.samuel-bouchet.fr/jeu-video/essentiel_physique#/&quot;&gt;https://teachings.samuel-bouchet.fr/jeu-video/essentiel_physique#/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;déplacement-dun-personnage-dans-un-univers-physique&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#d%C3%A9placement-dun-personnage-dans-un-univers-physique&quot; aria-label=&quot;déplacement dun personnage dans un univers physique permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Déplacement d’un personnage dans un univers physique&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Ajouter un Rigidbody2D configuré en dynamique. Cocher la case “Contraints: Freeze rotation Z” pour que le sprite ne tourne pas sur lui même.&lt;/li&gt;
&lt;li&gt;Ajouter un CircleCollider2D. Il est possible d’ajouter plusieurs collider2D sur un même gameObject pour créer une forme composée, il en faut au moins un. Ici le circle collider eut être édité en cliquant sur le bouton “edit collider” et en modifiant la taille et la position du cercle qui apparait sur le personnage.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/cc41e737da1419fac3cbc5a33e256b4a/9a1cf/physics.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 83.78378378378379%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAIAAABSJhvpAAAACXBIWXMAAAsSAAALEgHS3X78AAADC0lEQVQ4y01Ty27bVhDlj6ReeGHYsBxREh9XlEheXr7Ee0nqwYdEPeA0sYsU3RVBFoH7EymC/IU/Ie2m2aQr/0AMy4DhnWE4dnY9ooAiB4OLucOZOTNzh9K/X75cfv16c3NzvV5fX19fXl6ur9ZXV+vb29v7+/unp6fHx8fvwEb5hmutPj08PNzd3Um/v3lbzhZ5Ua6Wy6IoFtW8qqppWc5mMyhxHE8mk2pWjYpiuVzBOB6PYcF5fHwsVfOFTR1F1RqNI0VTgygwqUmZDcVmNnWpHwV9q7doy6FvU8Z0Xe/UYIxJPBq4jI5Had8gltWLc7GRIo7zjSRlInKRlul44PqeSynt9/tRFLmum6apNEhLFo1Hsxc6i4nj80zwScwnPBpHOPlkcyKLwz2nhqZprVar2WwikRSlhS2yIH/ZsQaE+UWVlVXG8/j0t9M4E7NiBGaecTdy/w9uNBq7u7uEdKUo9BhPgkionVbf7MZFkuQJnwhEigz1D8NhWL2owiR0mMM5N03T9/1utxsEgYS7pqqWaWqa3jN7COB12FZQc1qk7z++/+XXU9AOBgMEY9qIGo1Gm+BWu60Toqqq0TfSaYrxbGU4HSZFki2y6ueKF0PLssFmGIaiKO12GzOTVqsVaoBpOwm5LUOasnzUfN543pA7st7VO2on0RXXMR3GPM/DwAkhYJUW80KICCm388DrIYthKy5zORddndiWLbiYExIwSh2HUtt1GZi54FKe54i0LOvs7KwsS+yPG9riZfPDhz8//fV3RGnouv98/vzq9WuUB1pVUzVdk2UZ/UvL5VIIgcrBiRS+55u0Z3kkCPztbuJrGIboC9XatqVvQBSls+l5Op3CA5EqUSlz3r37w4u8PWMfw8Sni4uL8/PzZz89w5Dg3ev10C1OMOPBJOw3fgBUTroE/J7nQ9ENXasxn8+HwyG2Am9xcnICDszFtm14Zlkm4TNMSIbc8MDGqz8AawgSsCER3MAhaiBFkiQSTDs7O3t7e/s1Dg4O9n/AQY3Dw8PtFSUc1YCO1v8DOsU/znt9HUUAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;physics&quot;
        title=&quot;physics&quot;
        src=&quot;/static/cc41e737da1419fac3cbc5a33e256b4a/fcda8/physics.png&quot;
        srcset=&quot;/static/cc41e737da1419fac3cbc5a33e256b4a/12f09/physics.png 148w,
/static/cc41e737da1419fac3cbc5a33e256b4a/e4a3f/physics.png 295w,
/static/cc41e737da1419fac3cbc5a33e256b4a/fcda8/physics.png 590w,
/static/cc41e737da1419fac3cbc5a33e256b4a/efc66/physics.png 885w,
/static/cc41e737da1419fac3cbc5a33e256b4a/9a1cf/physics.png 924w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ensuite, il faudra utiliser un script pour déplacer le personnage. Lorsqu’on travaille avec le moteur physique de Unity :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on doit toujours déplacer l’objet en modifiant le RigidBody2D. On par exemple le déplacer en utilisant dans un script &lt;code class=&quot;language-text&quot;&gt;rigidbody2D.velocity = new Vector2(1, 0)&lt;/code&gt; pour donner une vitesse de 1 unité par seconde vers la droite, le moteur physique se chargera de mettre à jour la position.&lt;/li&gt;
&lt;li&gt;il est préférable de faire cette action dans une fonction &lt;code class=&quot;language-text&quot;&gt;void FixedUpdate() {&lt;/code&gt; plutôt que dans l’habituel &lt;code class=&quot;language-text&quot;&gt;void Update() {&lt;/code&gt; car FixedUpdate est appelé à chaque étape du moteur physique alors que Update est appelé à chaque rendu de frame du moteur, les 2 n’étant pas forcément synchronisés en fonction de la configuration du moteur de jeu et des performances de la machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;les-règles-du-jeu&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#les-r%C3%A8gles-du-jeu&quot; aria-label=&quot;les règles du jeu permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Les règles du jeu&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Créer des buts sur les côtés&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lorsque la balle entre dans un but, &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;+1 point pour l’équipe de la couleur opposée&lt;/li&gt;
&lt;li&gt;la balle est remise au milieu&lt;/li&gt;
&lt;li&gt;les joueurs sont repositionnés de chaque côté&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;lorsqu’une équipe à 3 points&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l’équipe est indiquée vainqueur&lt;/li&gt;
&lt;li&gt;les points sont remis à 0&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;les joueurs sont bloqués par la balle et ne la font pas bouger&lt;/li&gt;
&lt;li&gt;les joueurs sont attaché à un marteau par un lien de longueur fixe, en bougeant ils peuvent donner de l’inertie et faire tourner le marteau&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;trucs-et-astuces&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#trucs-et-astuces&quot; aria-label=&quot;trucs et astuces permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Trucs et astuces&lt;/h2&gt;
&lt;p&gt;Source : &lt;a href=&quot;https://teachings.samuel-bouchet.fr/jeu-video/4_fichespratiques#/4/1&quot;&gt;https://teachings.samuel-bouchet.fr/jeu-video/4_fichespratiques#/4/1&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;prefabs&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#prefabs&quot; aria-label=&quot;prefabs permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Prefabs&lt;/h3&gt;
&lt;p&gt;Les prefabs permettent de créer un gameObject “modèle” qui pourra ensuite être instancié sur la scène autant de fois qu’on le souhaite à l’identique. Il est aussi possible d’instancier des prefabs dynamiquement via des scripts.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Glisser/Déposer un objet d’une scène dans le projet pour faire un prefab&lt;/li&gt;
&lt;li&gt;Glisser/Déposer un prefab sur la scène pour créer une instance liée&lt;/li&gt;
&lt;li&gt;Mettre à jour prefab = update sur toutes les instances liés&lt;/li&gt;
&lt;li&gt;Mettre à jour instance liée = possibilité d’apply&lt;/li&gt;
&lt;li&gt;Seules les valeurs par défauts sont mises à jours, les valeurs spécifiques instance sont indiquées en gras dans l’interface&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour instancier dynamiquement un prefab, il faudra créé une propriété &lt;code class=&quot;language-text&quot;&gt;public GameObject myPrefab;&lt;/code&gt; dans le script qui doit l’utiliser. Ensuite, il est possible de faire à tout moment &lt;code class=&quot;language-text&quot;&gt;var instance = Instantiate(myPrefab)&lt;/code&gt; pour ajouter l’élément sur la scène dynamiquement. La variable “instance” pourra être modifiée directement pour changer certaines propriétés du gameObject (par exemple sa position).&lt;/p&gt;
&lt;h3 id=&quot;conseils-de-collaboration&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#conseils-de-collaboration&quot; aria-label=&quot;conseils de collaboration permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Conseils de collaboration&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://teachings.samuel-bouchet.fr/jeu-video/4_fichespratiques#/4/2&quot;&gt;https://teachings.samuel-bouchet.fr/jeu-video/4_fichespratiques#/4/2&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une scène par collaborateur (Très difficile à fusionner à la main)&lt;/li&gt;
&lt;li&gt;Chacun développe ses prefabs, scripts et sa scène de façon indépendante&lt;/li&gt;
&lt;li&gt;1 personne fait l’intégration dans la scène générale du jeu&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;interactions-entre-scripts&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#interactions-entre-scripts&quot; aria-label=&quot;interactions entre scripts permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Interactions entre scripts&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScriptName&lt;/span&gt; scripteRef&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; Start &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Récupère une référence au script ScriptName attaché au même GameObject&lt;/span&gt;
    scripteRef &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;scriptname&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    scripteRef&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;someMethodOfScriptName&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;hiérarchie---références-et-parents&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#hi%C3%A9rarchie---r%C3%A9f%C3%A9rences-et-parents&quot; aria-label=&quot;hiérarchie   références et parents permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Hiérarchie - références et parents&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// un gameObject de la scène, on réfère ici son Transform&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Transform&lt;/span&gt; otherGameObjectTransform&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// on affectera dans scripteRef le ScriptName de ce gameObject&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScriptName&lt;/span&gt; scripteRef&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// un 2eme game object de la scène, on réfère ici le GameObject&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;GameObject&lt;/span&gt; otherGameObject2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// on affectera dans scripteRef2 le ScriptName de ce 2eme gameObject&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScriptName&lt;/span&gt; scripteRef2&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; Start &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// scripteRef attaché à otherGameObjectTransform&lt;/span&gt;
    scripteRef &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; otherGameObjectTransform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gameObject&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;scriptname&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;Transform&lt;/span&gt; parent &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; otherGameObjectTransform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parent&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// scripteRef2 attaché à otherGameObject2&lt;/span&gt;
    scripteRef2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; otherGameObject2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;scriptname&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;Transform&lt;/span&gt; parent2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; otherGameObject2&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;parent&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;hiérarchie---parcourir-les-enfants&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#hi%C3%A9rarchie---parcourir-les-enfants&quot; aria-label=&quot;hiérarchie   parcourir les enfants permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Hiérarchie - Parcourir les enfants&lt;/h3&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; Start &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// on cherche à trouver les ScriptName dans les enfants, mais le parcours d&apos;enfant&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// peut servir à plein de choses.&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// méthode 1, si on souhaite utiliser LinQ sur la collection d&apos;enfants&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;IEnumerable&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Transform&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; children &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;IEnumerable&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;Transform&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Transform&lt;/span&gt; child &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; children&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        child&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gameObject&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ScriptName&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// peut être null !&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// méthode 2, plus courte si on veut juste itérer&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Transform&lt;/span&gt; child &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        child&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;gameObject&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponent&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ScriptName&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// peut être null !&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// méthode 3, si on cherche spécifiquement un script&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;ScriptName&lt;/span&gt; script &lt;span class=&quot;token keyword&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;GetComponentsInChildren&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ScriptName&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// script n&apos;est pas null&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&quot;audio&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#audio&quot; aria-label=&quot;audio permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Audio&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;AudioSource = Haut parleur qui peut lire un son à la fois.&lt;/li&gt;
&lt;li&gt;C’est un composant à attacher à un game objet, il sera spacialisé à l’endroit de l’objet.&lt;/li&gt;
&lt;li&gt;AudioClip = Clip audio qui peut être lu par un Audio source.&lt;/li&gt;
&lt;li&gt;On peut changer le AudioClip d’un AudioSource par script.&lt;/li&gt;
&lt;li&gt;Le son est capturé par l’AudioListener, positionné par défaut sur la caméra.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;executeineditmode&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#executeineditmode&quot; aria-label=&quot;executeineditmode permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;[ExecuteInEditMode]&lt;/h3&gt;
&lt;p&gt;L’annotation [ExecuteInEditMode] permet d’exécuter un script en mode édition. Ex:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/BallGameNetworked/Scripts/DepthSortByY.cs&quot;&gt;DepthSortByY&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/samuelb/Scripts/SnapToGrid.cs&quot;&gt;SnapToGrid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/samuelb/Scripts/LifebarController.cs&quot;&gt;LiffebarController&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/samuelb/Scripts/Track.cs&quot;&gt;Track&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;barre-de-vie&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#barre-de-vie&quot; aria-label=&quot;barre de vie permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Barre de vie&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;GameObject parent pour positionner le tout&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GameObject BackgroundScaler pour étendre la barre vide&lt;/li&gt;
&lt;li&gt;SpriteRenderer BackgroundSprite avec décalage de 0.5 vers la droite pour décaler le point d’origine du scaling&lt;/li&gt;
&lt;li&gt;GameObject ForegroundScaler pour étendre la barre pleine&lt;/li&gt;
&lt;li&gt;SpriteRenderer ForegroundSprite avec décalage de 0.5 vers la droite pour décaler le point d’origine du scaling&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Ajouter un script pour piloter la taille des éléments visuels (Ex: &lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/samuelb/Scripts/LifebarController.cs&quot;&gt;LifebarController&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video controls width=&quot;720&quot; height=&quot;405&quot;&gt;
    &lt;source src=&quot;/163e265984630602c5472c2689f5996b/LifebarController_h1n8jl.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h3 id=&quot;exécuter-une-action-étendue-sur-plusieurs-frames--durées&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ex%C3%A9cuter-une-action-%C3%A9tendue-sur-plusieurs-frames--dur%C3%A9es&quot; aria-label=&quot;exécuter une action étendue sur plusieurs frames  durées permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Exécuter une action étendue sur plusieurs frames / durées&lt;/h3&gt;
&lt;p&gt;Appeler une fois :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;StartCoroutine &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;DoRotateByStep &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Effet avec boucle :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;cs&quot;&gt;&lt;pre class=&quot;language-cs&quot;&gt;&lt;code class=&quot;language-cs&quot;&gt;&lt;span class=&quot;token return-type class-name&quot;&gt;IEnumerator&lt;/span&gt; DoRotateByStep &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;Quaternion&lt;/span&gt; originalRotation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rotation&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; durationInFrames &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;20&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; durationInFrames&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; i&lt;span class=&quot;token operator&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rotation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Quaternion&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Euler &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;360f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; durationInFrames&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;yield&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token comment&quot;&gt;// attends la prochaine frame pour continuer&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;transform&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;rotation &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; originalRotation&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Exemple plus complexe: &lt;a href=&quot;https://github.com/Lythom/JeuVideo/blob/26841377c41347fc4d5d0049fa09b2d775a866ff/Assets/BallGameNetworked/Scripts/Shake.cs&quot;&gt;Shake&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Envie de réagir ? Mentionnez &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; dans votre tweet ou envoyer un mail à &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[2020, a year of temporal paradoxes?]]></title><description><![CDATA[Happy new year! Is training your brain some part of this year good resolutions? Then give a try to this new A Time Paradox update on Android…]]></description><link>https://a-game-studio.com/blog/2020-a-year-of-temporal-paradoxes/</link><guid isPermaLink="false">https://a-game-studio.com/blog/2020-a-year-of-temporal-paradoxes/</guid><pubDate>Fri, 03 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Happy new year! Is training your brain some part of this year good resolutions? Then give a try to this new A Time Paradox update on Android!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=studio.agame.atimeparadox&quot;&gt;A Time Paradox on Play Store&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;english-version&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#english-version&quot; aria-label=&quot;english version permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;English version&lt;/h2&gt;
&lt;p&gt;A Time Paradox is now available in most country world wide on the Android Play Store. You can enjoy the game as long as you can speak english or french!&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;720&quot; height=&quot;auto&quot; controls&gt;
        &lt;source src=&quot;/f1c9aabbcb33780c4c41cd02dea34aba/menurotate_720.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Rotating menu of A Time Paradox&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;play-with-a-friend&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#play-with-a-friend&quot; aria-label=&quot;play with a friend permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Play with a friend!&lt;/h2&gt;
&lt;p&gt;A new cooperation campaign is available as preview. 10 levels are already there to play with a friend (use landscape mode), more will come!&lt;/p&gt;
&lt;h2 id=&quot;story-mode-rebalancing&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#story-mode-rebalancing&quot; aria-label=&quot;story mode rebalancing permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Story mode rebalancing&lt;/h2&gt;
&lt;p&gt;Previously stuck? Give it another try! There is even challenge keys to collect now.&lt;/p&gt;
&lt;h2 id=&quot;challenges&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#challenges&quot; aria-label=&quot;challenges permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Challenges&lt;/h2&gt;
&lt;p&gt;Those keys will allow you to unlock new challenges levels. If you already completed the game, here is more content to play with!&lt;/p&gt;
&lt;p&gt;A bunch of keys will be distributed weekly when you start the game! (required an internet connection)&lt;/p&gt;
&lt;h2 id=&quot;level-editor&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#level-editor&quot; aria-label=&quot;level editor permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Level editor&lt;/h2&gt;
&lt;p&gt;The level editor will allow you to create your own levels and play with the game engine itself. Come post your levels on the &lt;a href=&quot;https://discord.gg/UVZ27gA&quot;&gt;Discord&lt;/a&gt;!&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;480&quot; height=&quot;auto&quot; controls&gt;
        &lt;source src=&quot;/9c55635581e373c7000227082d9b260d/editor_showcase_480.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Level editor showcase&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;account-creation-and-online-backup&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#account-creation-and-online-backup&quot; aria-label=&quot;account creation and online backup permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Account creation and online backup&lt;/h2&gt;
&lt;p&gt;After you bought the game, you can create a passwordless “A Game Studio” account from the game. This will sync your progress and acquired challenge keys when connected to the internet. The game will remain 100% playable offline.&lt;/p&gt;
&lt;h2 id=&quot;sound-toggle&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sound-toggle&quot; aria-label=&quot;sound toggle permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sound toggle&lt;/h2&gt;
&lt;p&gt;I bet a lot of you like to play with your favorite musics!&lt;/p&gt;
&lt;h1 id=&quot;have-fun&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#have-fun&quot; aria-label=&quot;have fun permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Have fun!&lt;/h1&gt;
&lt;p&gt;I can’t wait to get feedbacks on all this new stuff, Have Fun with the game!&lt;/p&gt;
&lt;p&gt;Samuel&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;https://a-time-paradox.com/&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Want to respond to this article? Let me know!&lt;br&gt;
PM or mention &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; or drop a message at &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[2020, une année de paradoxes temporels ?]]></title><description><![CDATA[Bonne Année 2020 ! Si entrainer votre cerveau fait partie de vos bonnes résolutions pour 2020, vous devriez aimer cette mise à jour de A…]]></description><link>https://a-game-studio.com/fr/blog/2020-a-year-of-temporal-paradoxes/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/2020-a-year-of-temporal-paradoxes/</guid><pubDate>Fri, 03 Jan 2020 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Bonne Année 2020 !&lt;/p&gt;
&lt;p&gt;Si entrainer votre cerveau fait partie de vos bonnes résolutions pour 2020, vous devriez aimer cette mise à jour de A Time Paradox ! Voici un aperçu de ce qu’elle contient.&lt;/p&gt;
&lt;p&gt;Elle est déjà disponible sur Android :
&lt;a href=&quot;https://play.google.com/store/apps/details?id=studio.agame.atimeparadox&quot;&gt;A Time Paradox sur Play Store&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;version-anglaise&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#version-anglaise&quot; aria-label=&quot;version anglaise permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Version anglaise&lt;/h2&gt;
&lt;p&gt;A Time Paradox est maintenant disponible dans la plupart des pays du monde, et vous pourrez le partager avec vos amis à l’étranger pour peu qu’ils parlent français ou anglais.&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;720&quot; height=&quot;auto&quot; controls&gt;
        &lt;source src=&quot;/f1c9aabbcb33780c4c41cd02dea34aba/menurotate_720.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Menu rotatif de A Time Paradox&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;jouez-avec-un-ami-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#jouez-avec-un-ami-&quot; aria-label=&quot;jouez avec un ami  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Jouez avec un ami !&lt;/h2&gt;
&lt;p&gt;L’aperçu de la nouvelle campagne coopérative est disponibles. Dix niveaux sont déjà jouables à 2 sur le même apppareil et d’autres sont prévus !&lt;/p&gt;
&lt;h2 id=&quot;rééquilibrage-du-mode-histoire&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#r%C3%A9%C3%A9quilibrage-du-mode-histoire&quot; aria-label=&quot;rééquilibrage du mode histoire permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Rééquilibrage du mode histoire&lt;/h2&gt;
&lt;p&gt;Vous étiez coincé ? Les niveaux trop durs ont été retravaillé ! Il y a même des clés de défi à collectionner dans certains niveaux.&lt;/p&gt;
&lt;h2 id=&quot;défis&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#d%C3%A9fis&quot; aria-label=&quot;défis permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Défis&lt;/h2&gt;
&lt;p&gt;Ces clés permettent de débloquer des niveaux de défi. Si vous avez déjà terminé le jeu, voilà de quoi s’amuser encore !&lt;/p&gt;
&lt;p&gt;Des lots de clés sont offerts en se connectant au jeu chaque semaine (nécessite une connexion internet).&lt;/p&gt;
&lt;h2 id=&quot;éditeur-de-niveaux&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#%C3%A9diteur-de-niveaux&quot; aria-label=&quot;éditeur de niveaux permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Éditeur de niveaux&lt;/h2&gt;
&lt;p&gt;L’éditeur de niveau enrichit encore plus l’expérience de A Time Paradox en vous permettant de créer vos propres défis. Venez les partager sur le &lt;a href=&quot;https://discord.gg/UVZ27gA&quot;&gt;Discord&lt;/a&gt; !&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;480&quot; height=&quot;auto&quot; controls&gt;
        &lt;source src=&quot;/9c55635581e373c7000227082d9b260d/editor_showcase_480.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Démonstration de l&apos;éditeur de niveaux&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;sauvegarde-de-la-progression-en-ligne&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sauvegarde-de-la-progression-en-ligne&quot; aria-label=&quot;sauvegarde de la progression en ligne permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sauvegarde de la progression en ligne&lt;/h2&gt;
&lt;p&gt;Après avoir acheté le jeu, il vous sera proposé de créer un compte “A Game Studio” pour synchroniser votre progression en ligne. Ne perdez plus vos clés de défis ni votre avancement en changement de matériel !
Le jeu restera toujours jouable sans internet.&lt;/p&gt;
&lt;h2 id=&quot;option-de-son&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#option-de-son&quot; aria-label=&quot;option de son permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Option de son&lt;/h2&gt;
&lt;p&gt;Vous pourrez désactiver/activer les sons désormais, je parie que certain d’entre vous apprécieront de jouer avec leurs musiques préférées.&lt;/p&gt;
&lt;h1 id=&quot;amusez-vous-bien-&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#amusez-vous-bien-&quot; aria-label=&quot;amusez vous bien  permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Amusez-vous bien !&lt;/h1&gt;
&lt;p&gt;J’attends vos retours avec impatience sur toutes ces nouveautés, amusez-vous bien !&lt;/p&gt;
&lt;p&gt;Samuel&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;https://a-time-paradox.com/&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Envie de réagir ? Mentionnez &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; dans votre tweet ou envoyer un mail à &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Upcoming update for A Time Paradox]]></title><description><![CDATA[A Time Paradox development is still going on! If you haven’t heard of it, it’s a puzzle game I’m working on based on infiltration against…]]></description><link>https://a-game-studio.com/blog/upcoming-update-for-a-time-paradox/</link><guid isPermaLink="false">https://a-game-studio.com/blog/upcoming-update-for-a-time-paradox/</guid><pubDate>Mon, 11 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A Time Paradox development is still going on! If you haven’t heard of it, it’s a puzzle game I’m working on based on infiltration against one-self.
Because the project is self financed, progress is depending on other jobs and life stuff. So how is A Time Paradox going may you ask? Reaching some key points!&lt;/p&gt;
&lt;h2 id=&quot;in-game&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#in-game&quot; aria-label=&quot;in game permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;In-game&lt;/h2&gt;
&lt;p&gt;Android freanch early access version is still available on the Play Store, but it’s ending soon. Challenge mode is now technically implemented, and will provided even harder challenges! The Story mode was made for smooth progression, and challenge mode to explore the limits of your mind.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 482px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 87.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAECAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAAB5cWiMVg7ZiUE/wD/xAAaEAACAwEBAAAAAAAAAAAAAAABAgAhMUER/9oACAEBAAEFAu149mZCzA9TH3//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAZEAACAwEAAAAAAAAAAAAAAAABEAARIYH/2gAIAQEABj8CuUhpWGcf/8QAHhAAAgICAgMAAAAAAAAAAAAAAREAMSFREHFBYcH/2gAIAQEAAT8hwiZWovUupZA8ahZsdmFA2YpFU+Uu74f/2gAMAwEAAgADAAAAENwg/wD/xAAWEQEBAQAAAAAAAAAAAAAAAAABABD/2gAIAQMBAT8QNL//xAAYEQACAwAAAAAAAAAAAAAAAAAAARARMf/aAAgBAgEBPxAdiyP/xAAdEAEBAAICAwEAAAAAAAAAAAABEQAhMUFhcbHw/9oACAEBAAE/ECFMMCsJm+CporT7wpLSDUZUoJvZNdYULj3Xvxk1sXnHgfuYlsrvnwM//9k=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;defi example&quot; title=&quot;defi example&quot; src=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg&quot; srcset=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/a80bd/defi_example.jpg 148w,
/static/3a553568f6e9992a82bc2bc00883ffa8/1c91a/defi_example.jpg 295w,
/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg 482w&quot; sizes=&quot;(max-width: 482px) 100vw, 482px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Some upcoming challenge&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You’ll also be given the opportunity to create your own level. I put it in for amusement, but could become a ccommunity creation tool in the future.&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;480&quot; height=&quot;auto&quot;&gt;
        &lt;source src=&quot;/9c55635581e373c7000227082d9b260d/editor_showcase_480.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Level editor showcase&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Finally, I had to tackle some big stuff like the hidden part of the iceberg, you’ll be asked if you want to synchronize your data using an “A Game Studio” account. Passwordless, the account will allow you to synchronize you data, scores and collected keys across devices. Also, you personnal data (email, game data) won’t be shared with 3rd party companies and will be kept secret on A Game Studio servers in Europe.&lt;/p&gt;
&lt;figure&gt;
        &lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;360&quot; height=&quot;auto&quot;&gt;
        &lt;source src=&quot;/8ecf8c48b42c24860292e4021f41ef2a/unlock_levels.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
    &lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Unlock all the challenges!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Challenges will unlock by collecting keys. There are several ways to get them like in-game levels and weekly deliveries. Also, you’ll never have to purchase “keys” directly. The promise is that once you bought the game, you have it all, and the content must be earned the hard way!&lt;/p&gt;
&lt;h2 id=&quot;on-the-web&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#on-the-web&quot; aria-label=&quot;on the web permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;On the web&lt;/h2&gt;
&lt;p&gt;Playing alone is cool, sharing the experience is greater! A Time Paradox will also be living on &lt;a href=&quot;https://discord.gg/UVZ27gA&quot;&gt;Discord&lt;/a&gt;), on &lt;a href=&quot;https://twitter.com/AGameStudio&quot;&gt;Twitter&lt;/a&gt;), and on &lt;a href=&quot;https://www.facebook.com/atimeparadox/&quot;&gt;Facebook&lt;/a&gt;. You only want news ? Check the &lt;a href=&quot;https://a-game-studio.com/rss.xml&quot;&gt;blog RSS&lt;/a&gt; or &lt;a href=&quot;https://a-time-paradox.com/#mc_embed_signup_scroll&quot;&gt;the newsletter&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;on-your-pc&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#on-your-pc&quot; aria-label=&quot;on your pc permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;On your PC&lt;/h2&gt;
&lt;p&gt;This update is also a first step toward PC release! Android update will come in the upcoming weeks, Pc version will have to wait some extra weeks after that. It will contains some exclusive game mode that wouldn’t fit mobile…&lt;/p&gt;
&lt;p&gt;If you prefer playing on PC, feel free to whishlist the game now on &lt;a href=&quot;https://store.steampowered.com/app/1167730/A_Time_Paradox/&quot;&gt;A Time Paradox Steam Page&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 488px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 69.5945945945946%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADR0lEQVQozxWPW1MaBwCFN9M4aqDaIEKrloTRXDSMoqJcJURUiCjK1eWyuyx7AZYFRAKEelkWFrm43gCJY1/y1KaPMQ+dpu1LXvrY/oj2f1TOfHPevjlzAL+fRBAKRePhcALDkwhKQzAFIRSMxBE0EQon0HAijCUxPIWTu0SkCxlNR6hMlMoAEBTDsRSGp3EiHQ7RaCCG+CIoRIXCyTAcxxGawHYJcg8n00QkTZDpRCofj7+hYmk6mQPWbNsqnV6jVc9Mz8yYzfN+UIWF1U6H3rCk9vsWAj7t+vqS8aX1tdW64fCAQZPJ7gBJJMN7wBgwt6gRSkVDogdAX59wxdSfTXxVOVQ5VwwKWT/s68vQA0Zdz9cDcvnoU6Vyxb79ZFxpCOZ2mn+XKteARqd7PDEiEPSNPfr+6XeSITRw76Zjw+yXR+5+OtqTScqk4unnjweF/Qqj2uoDp2cMg5LJidkNpcZ2t6wdGhm+19Nj2zTYN03iGPmifhyvcfynD6s0vXXOL2/ZIMgqEPQ+0mvV264tB6xUrX0zPDUqW+jK4tFvH/TeHxmXScdlRo93N5s9u/3063//fvz82++f/5jXaUXysQFBr2RCPqV/yRzsQ6T3LrjFDMzOLw5KJWKRUDLxJPm2ECUjtVarUGKZY46rHl//9PObbNbq9orEA8PPJ18o50Ao6sL8fAG7ZdzAnE4vnFI8vDusVNTr9ThN3375Uj/lr9utq18+3Lx/z5ZKdb4hVzyTGF4pzSZog4DMXMVX+JPLA24/FEolPRDshINOGApGo+TeXpgkInQ8wfMIjtntduOqecG4NGsyLK9vUARCUBC1i7txDkil37I1/rBcP27w3NlZ5erqpNOpN5vn7ava+cVJ5x3DsmAgYHG5dasra5ZNG+TSgbDl/J/J2F9AOneQOyxnCkW+1T4qskcMU63VOI6rNU6qzVat1a41Gj/sH2T3D9BY1OHwLixbp9Z88zt5lSMOJFLZ+kWzcnpxefMjw3FMsVirVkvFIlssnl42L9odlmUZhimXy7l83gcGlIuvpONzo880DyVjgN3uczgDLg/cxRVwuoIeD+xxQ253cGcnBIKo14t4d5BudwnZt4KW116LxWGxuv8H+2wnrDnqc9MAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;A Time Paradox in Steam library&quot; title=&quot;A Time Paradox in Steam library&quot; src=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png&quot; srcset=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/12f09/in_library.png 148w,
/static/9386ed40e2375ee82601afac06ddfe5d/e4a3f/in_library.png 295w,
/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png 488w&quot; sizes=&quot;(max-width: 488px) 100vw, 488px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Soon in your library&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;I wish A Time Paradox raise your interest as much as it passionate me! See you soon in time adventures ;)&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Want to respond to this article? Let me know!&lt;br&gt;
PM or mention &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; or drop a message at &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Mise à jour prochaine de A Time Paradox]]></title><description><![CDATA[A Time Paradox est toujours en développement ! Pour ceux qui ne connaissent pas c’est un jeu de réflexion que je suis en train de développer…]]></description><link>https://a-game-studio.com/fr/blog/upcoming-update-for-a-time-paradox/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/upcoming-update-for-a-time-paradox/</guid><pubDate>Mon, 11 Nov 2019 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A Time Paradox est toujours en développement ! Pour ceux qui ne connaissent pas c’est un jeu de réflexion que je suis en train de développer dont la mécanique principale est l’infiltration contre soi-même.
Comme le projet est auto-financé, il progresse de façon irrégulière en fonction des prestations et événements de la vie. Où en est-il ? Et bien puisque vous demandez… de plus en plus proche de son but !&lt;/p&gt;
&lt;h2 id=&quot;dans-le-jeu&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dans-le-jeu&quot; aria-label=&quot;dans le jeu permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dans le jeu&lt;/h2&gt;
&lt;p&gt;La version Android est toujours en accès anticipé, mais touche à sa fin. Le mode défi est techniquement terminé et le mode histoire a été retravaillé pour être plus abordable. Là où le mode histoire vous permettra de progresser petit à petit, le mode défi est fait pour explorer les limites de votre esprit ! N’hésitez pas à reprendre l’histoire si vous aviez du vous arrêter à cause d’un niveau infranchissable, les barrières de l’extrême sont maintenant dans les défis.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 482px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 87.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAECAwX/xAAVAQEBAAAAAAAAAAAAAAAAAAABAP/aAAwDAQACEAMQAAAB5cWiMVg7ZiUE/wD/xAAaEAACAwEBAAAAAAAAAAAAAAABAgAhMUER/9oACAEBAAEFAu149mZCzA9TH3//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAEDAQE/AR//xAAUEQEAAAAAAAAAAAAAAAAAAAAg/9oACAECAQE/AR//xAAZEAACAwEAAAAAAAAAAAAAAAABEAARIYH/2gAIAQEABj8CuUhpWGcf/8QAHhAAAgICAgMAAAAAAAAAAAAAAREAMSFREHFBYcH/2gAIAQEAAT8hwiZWovUupZA8ahZsdmFA2YpFU+Uu74f/2gAMAwEAAgADAAAAENwg/wD/xAAWEQEBAQAAAAAAAAAAAAAAAAABABD/2gAIAQMBAT8QNL//xAAYEQACAwAAAAAAAAAAAAAAAAAAARARMf/aAAgBAgEBPxAdiyP/xAAdEAEBAAICAwEAAAAAAAAAAAABEQAhMUFhcbHw/9oACAEBAAE/ECFMMCsJm+CporT7wpLSDUZUoJvZNdYULj3Xvxk1sXnHgfuYlsrvnwM//9k=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;defi example&quot; title=&quot;defi example&quot; src=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg&quot; srcset=&quot;/static/3a553568f6e9992a82bc2bc00883ffa8/a80bd/defi_example.jpg 148w,
/static/3a553568f6e9992a82bc2bc00883ffa8/1c91a/defi_example.jpg 295w,
/static/3a553568f6e9992a82bc2bc00883ffa8/05b37/defi_example.jpg 482w&quot; sizes=&quot;(max-width: 482px) 100vw, 482px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Exemple de d&amp;#xE9;fi &amp;#xE0; venir&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Vous pourrez aussi créer vos propres expériences grâce à l’éditeur de niveau intégré ! Simple outil d’amusement dans un premier temps, il pourra peut être vous permettre plus tard de créer des expériences plus grandes pour les autres joueurs.&lt;/p&gt;
&lt;figure&gt;
    &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;480&quot; height=&quot;auto&quot;&gt;
        &lt;source src=&quot;/9c55635581e373c7000227082d9b260d/editor_showcase_480.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
    &lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Démonstration de l&apos;éditeur de niveau&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Enfin, c’était un gros morceau à développer telle la partie cachée d’un iceberg, il vous sera proposé si vous le souhaitez de créer un compte “A Game Studio”. Sans mot de passe, avec juste votre adresse mail, vous aurez le choix de synchroniser votre progression en ligne. Ainsi, vous pourrez récupérer vos clés, votre progression et vos records si vous changez de téléphone ou pour jouer sur plusieurs périphériques à la fois. A noter que vos données personnelles (e-mail et données de jeux) ne seront pas transmises à des tiers, et que les serveurs A Game Studio sont localisés en Europe.&lt;/p&gt;
&lt;figure&gt;
    &lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;360&quot; height=&quot;auto&quot;&gt;
        &lt;source src=&quot;/8ecf8c48b42c24860292e4021f41ef2a/unlock_levels.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
    &lt;/div&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Débloquez tous les défis !&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Sauvegarder ses clés ? Et oui ! Les défis se débloquent en collectionnant des clés. Vous pourrez en récupérer de multiple façon, dans certains niveaux du jeu lui-même ou chaque semaine en vous connectant. A noter que les clés ne seront jamais payantes directement. La promesse reste inchangée : un achat unique pour profiter de l’intégralité de l’expérience du jeu. Il vous faudra mériter certains contenus cependant !&lt;/p&gt;
&lt;h2 id=&quot;dans-linternet&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dans-linternet&quot; aria-label=&quot;dans linternet permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dans l’internet&lt;/h2&gt;
&lt;p&gt;Jouer seul c’est sympa, et partager est une expérience plus grande encore ! Aussi, A Time Paradox est présent sur &lt;a href=&quot;https://discord.gg/UVZ27gA&quot;&gt;Discord&lt;/a&gt;), sur &lt;a href=&quot;https://twitter.com/AGameStudio&quot;&gt;Twitter&lt;/a&gt;), et sur &lt;a href=&quot;https://www.facebook.com/atimeparadox/&quot;&gt;Facebook&lt;/a&gt;. Si vous voulez juste les actualités sans fioriture sociale, le &lt;a href=&quot;https://a-game-studio.com/rss.xml&quot;&gt;flux RSS de ce blog&lt;/a&gt; ou &lt;a href=&quot;https://a-time-paradox.com/#mc_embed_signup_scroll&quot;&gt;la newsletter&lt;/a&gt; seront vos meilleurs choix.&lt;/p&gt;
&lt;h2 id=&quot;dans-votre-pc&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#dans-votre-pc&quot; aria-label=&quot;dans votre pc permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Dans votre PC&lt;/h2&gt;
&lt;p&gt;Cette mise à jour est aussi une première étape préparatoire à la sortie PC du jeu ! Si la mise à jour Android viendra dans les prochaines semaines, la version PC prendre encore quelques semaines de plus. Elle contiendra un mode exclusif qui n’aurait pas été possible sur mobile…&lt;/p&gt;
&lt;p&gt;Si vous êtes plutôt joueur PC, je vous invite à ajouter &lt;a href=&quot;https://store.steampowered.com/app/1167730/A_Time_Paradox/&quot;&gt;A Time Paradox&lt;/a&gt; à votre liste de souhaits sans plus tarder.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 488px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 69.5945945945946%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAIAAACgpqunAAAACXBIWXMAAA7DAAAOwwHHb6hkAAADR0lEQVQozxWPW1MaBwCFN9M4aqDaIEKrloTRXDSMoqJcJURUiCjK1eWyuyx7AZYFRAKEelkWFrm43gCJY1/y1KaPMQ+dpu1LXvrY/oj2f1TOfHPevjlzAL+fRBAKRePhcALDkwhKQzAFIRSMxBE0EQon0HAijCUxPIWTu0SkCxlNR6hMlMoAEBTDsRSGp3EiHQ7RaCCG+CIoRIXCyTAcxxGawHYJcg8n00QkTZDpRCofj7+hYmk6mQPWbNsqnV6jVc9Mz8yYzfN+UIWF1U6H3rCk9vsWAj7t+vqS8aX1tdW64fCAQZPJ7gBJJMN7wBgwt6gRSkVDogdAX59wxdSfTXxVOVQ5VwwKWT/s68vQA0Zdz9cDcvnoU6Vyxb79ZFxpCOZ2mn+XKteARqd7PDEiEPSNPfr+6XeSITRw76Zjw+yXR+5+OtqTScqk4unnjweF/Qqj2uoDp2cMg5LJidkNpcZ2t6wdGhm+19Nj2zTYN03iGPmifhyvcfynD6s0vXXOL2/ZIMgqEPQ+0mvV264tB6xUrX0zPDUqW+jK4tFvH/TeHxmXScdlRo93N5s9u/3063//fvz82++f/5jXaUXysQFBr2RCPqV/yRzsQ6T3LrjFDMzOLw5KJWKRUDLxJPm2ECUjtVarUGKZY46rHl//9PObbNbq9orEA8PPJ18o50Ao6sL8fAG7ZdzAnE4vnFI8vDusVNTr9ThN3375Uj/lr9utq18+3Lx/z5ZKdb4hVzyTGF4pzSZog4DMXMVX+JPLA24/FEolPRDshINOGApGo+TeXpgkInQ8wfMIjtntduOqecG4NGsyLK9vUARCUBC1i7txDkil37I1/rBcP27w3NlZ5erqpNOpN5vn7ava+cVJ5x3DsmAgYHG5dasra5ZNG+TSgbDl/J/J2F9AOneQOyxnCkW+1T4qskcMU63VOI6rNU6qzVat1a41Gj/sH2T3D9BY1OHwLixbp9Z88zt5lSMOJFLZ+kWzcnpxefMjw3FMsVirVkvFIlssnl42L9odlmUZhimXy7l83gcGlIuvpONzo880DyVjgN3uczgDLg/cxRVwuoIeD+xxQ253cGcnBIKo14t4d5BudwnZt4KW116LxWGxuv8H+2wnrDnqc9MAAAAASUVORK5CYII=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Jeu A Time Paradox dans la biblioth&amp;#xE8;que de jeux steam&quot; title=&quot;Jeu A Time Paradox dans la biblioth&amp;#xE8;que de jeux steam&quot; src=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png&quot; srcset=&quot;/static/9386ed40e2375ee82601afac06ddfe5d/12f09/in_library.png 148w,
/static/9386ed40e2375ee82601afac06ddfe5d/e4a3f/in_library.png 295w,
/static/9386ed40e2375ee82601afac06ddfe5d/bd48c/in_library.png 488w&quot; sizes=&quot;(max-width: 488px) 100vw, 488px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Bient&amp;#xF4;t dans votre biblioth&amp;#xE8;que&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;J’espère que A Time Paradox vous intéresse autant qu’il me passionne ! A bientôt pour de nouvelles aventures temporelles !&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Envie de réagir ? Mentionnez &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; dans votre tweet ou envoyer un mail à &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[What babies teach us about game design]]></title><description><![CDATA[“Between twenty and fifty times a day, the little child experiences a state of great enthusiasm. (…) Each small storm of enthusiasm…]]></description><link>https://a-game-studio.com/blog/what-babies-teach-us-about-game-design/</link><guid isPermaLink="false">https://a-game-studio.com/blog/what-babies-teach-us-about-game-design/</guid><pubDate>Fri, 14 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;“Between twenty and fifty times a day, the little child experiences a state of great enthusiasm. (…) Each small storm of enthusiasm implements a kind of cerebral autodoping. In this way, the substances necessary for all processes of growth and redevelopment of neural networks are produced. That is why we are learning so quickly in what we are doing with enthusiasm. Because it’s as simple as that: the brain develops precisely where it is enthusiastically used.” &lt;cite&gt;Pr. Gerald Hüther&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 38.513513513513516%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsSAAALEgHS3X78AAACUElEQVQoz2NgAIJz9xIZGbCAqKAQ1v+TGeBy5cEWJrN8/M4sjAi/s6AyMdx2IjsnF1B8R14aWM1qHw8GhhMPLKDK/zOs31amv3ZPdM+CTRb5BdPWOnes2Hi3evnh48kVDZGzl0csnbso43+jt/P/aXnu/xdtCPi/50ju7f///wmAdK+bnswcNM0YYtSe4wUJW456XV9/1Oz/ot36/1tn2v0Ib5vyNnLa8v9ztnT8X7/E6/+JI57/F66P/x+XaPu3rMzgT8MU/b97t3r+P1+VdbRfXEsC7KT3WRDfnL7U2LL+mOv/pfuc10Qkh7zXdQ76H9fY/t/Fz+vP1QVSf/5fEvjz5pDCn9Yy138HFrn/+/Ym7f/cSVb/Sj3Vfy/zd/w/0dIym2GnKwfQKGaG////Sy3YdfhE05J1/wv71t6Kj2r/5OhR/L8wKvjvznT9fxvT9P9PTRP4f7iz6c+TDUf/zK7y+NPRHPuntjTob3mRzZ+J7QE/p89wfjprpfvH6Ytd+xk+fPggu/rU1eOZ81f9tw+t+u9m0/w/wSPz//p0i98Hi8z+7kyx+pPi7v19jk/R/2MB3f/DnMv/B/pM/O/vW/x/8Wbv/3feR/+//Mzn/5Vn7v/X77f+DXIh/+0Hj21X7T9cffjQ6fq6uvlLZ7R23f4w0en/2zLN/9cqXC59+PixZ0fFpGPL7PLOJPk1nHR3qLkaF9o6e91uv/Y9Z4z6thw1SVt7SNd7zgY1fYbvP39xAw0VB2IBIGYCYrEvf/52XFrcOeu4v2Doai9taQYSAABDtjQivmMfBgAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Drawing of a construction game for children&quot; title=&quot;Drawing of a construction game for children&quot; src=&quot;/static/4834195358582425df939e5e915ab852/fcda8/lego-3388163_640.png&quot; srcset=&quot;/static/4834195358582425df939e5e915ab852/12f09/lego-3388163_640.png 148w,
/static/4834195358582425df939e5e915ab852/e4a3f/lego-3388163_640.png 295w,
/static/4834195358582425df939e5e915ab852/fcda8/lego-3388163_640.png 590w,
/static/4834195358582425df939e5e915ab852/6af66/lego-3388163_640.png 640w&quot; sizes=&quot;(max-width: 590px) 100vw, 590px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
  &lt;figcaption&gt;Illustration by &lt;a href=&quot;https://pixabay.com/fr/users/Painter06-3732158/&quot;&gt;Francis Ray&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;on-brain-development&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#on-brain-development&quot; aria-label=&quot;on brain development permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;On brain development&lt;/h2&gt;
&lt;p&gt;In addition to telling us about the mechanics of human growth, which are invaluable in order to guide our childs toward a better development, Professor Gerald Hüther’s “Neurobiology and Education” conference sheds light on a specific brain mechanic linked to learning.&lt;/p&gt;
&lt;p&gt;Studies show&lt;sup id=&quot;fnref-1&quot;&gt;&lt;a href=&quot;#fn-1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;,&lt;/sup&gt;&lt;sup id=&quot;fnref-2&quot;&gt;&lt;a href=&quot;#fn-2&quot; class=&quot;footnote-ref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; that spikes of enthusiasm causes a spill of neuroplastic transmitters. In the same way as fertilizer, their role is to promote brain development. Three important things should be noted:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;only the actually &lt;em&gt;active areas&lt;/em&gt; of the brain are affected by this development,&lt;/li&gt;
&lt;li&gt;it only happens when you feel a powerful emotion,&lt;/li&gt;
&lt;li&gt;this biomechanics phenomena works regardless of age.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;An anecdote from the author, relevant in our context:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Our young people have had, for the past 10 years, a region of the brain that receives so much fertilizer that it has already doubled in size: this is the region that is responsible for regulating thumb movements. &lt;cite&gt;Pr. Gerald Hüther&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The take away is that to convey a message, encourage certain behaviours, promote the memorization of important elements, the player must be emotionally affected.&lt;/p&gt;
&lt;h2 id=&quot;on-social-exclusion&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#on-social-exclusion&quot; aria-label=&quot;on social exclusion permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;On social exclusion&lt;/h2&gt;
&lt;p&gt;We also learn in this conference that when we experience isolation or social exclusion, it activates the same neural circuits as when we are inflicted bodily suffering.&lt;/p&gt;
&lt;p&gt;With this in mind, the inclusive part of a game becomes essential: it is not moraly possible to produce a game that creates suffering.&lt;/p&gt;
&lt;p&gt;From my experience, a concrete example is the &lt;a href=&quot;https://fr.asmodee.com/fr/games/dixit/&quot;&gt;Dixit&lt;/a&gt; board game. In this game the goal is to make some players guess a card, but not all. As a result, players who already have strong social relationships tend to strengthen their relations even more, but players who are not already part of the social group majority are excluded as a result of the game mechanics.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAwABAv/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/aAAwDAQACEAMQAAAB5xkCOSs//8QAGhAAAgMBAQAAAAAAAAAAAAAAAAECERIiMf/aAAgBAQABBQKcqNvKsroXn//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ASf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAEAAwEAAAAAAAAAAAAAAAARAAEQMf/aAAgBAQAGPwITOsrf/8QAGxABAAMBAAMAAAAAAAAAAAAAAQARITFRYXH/2gAIAQEAAT8hJH1swOGVbLjj28yiiDk72ChU/9oADAMBAAIAAwAAABDgL//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPxBYM//EABcRAQEBAQAAAAAAAAAAAAAAAAEAITH/2gAIAQIBAT8QxxJ7f//EABwQAQEAAwADAQAAAAAAAAAAAAERACExQVGBsf/aAAgBAQABPxBFQSxrhrRRsbZ1/cPCfEyPcPuK4gopZzANBR6OAAABADmf/9k=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Card from Mysterium&quot; title=&quot;Card from Mysterium&quot; src=&quot;/static/64de158dd7f29285f7e94321cd6f5893/1c72d/mysterium.jpg&quot; srcset=&quot;/static/64de158dd7f29285f7e94321cd6f5893/a80bd/mysterium.jpg 148w,
/static/64de158dd7f29285f7e94321cd6f5893/1c91a/mysterium.jpg 295w,
/static/64de158dd7f29285f7e94321cd6f5893/1c72d/mysterium.jpg 590w,
/static/64de158dd7f29285f7e94321cd6f5893/80e3c/mysterium.jpg 720w&quot; sizes=&quot;(max-width: 590px) 100vw, 590px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Example of &amp;quot;vision&amp;quot; cards from Mysterium&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Aware of this, the flaw is corrected in &lt;a href=&quot;https://fr.asmodee.com/fr/games/mysterium/&quot;&gt;Mysterium&lt;/a&gt;. Identical in its mechanics (making people guess cards), the collaborative approach naturally encourages players to know each other better in order to succeed. The designers have managed to keep the fun game mechanics (Dixit remains a very good game!) while reversing the relationships between the players: the new game objectives promote empathy even more (players try to imagine how the other players will perceive a visual) and the discriminating mechanics disappears (even if only a part of the group guesses, the whole group benefits from the discovery).&lt;/p&gt;
&lt;h2 id=&quot;for-us-and-for-all&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#for-us-and-for-all&quot; aria-label=&quot;for us and for all permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;For us and for all&lt;/h2&gt;
&lt;p&gt;In relationships with our children and players alike, we benefit from a better understanding of how the brain works in order to provide more fulfilling experiences. As designers (but not only), neuroscience probably still has a lot to teach us. Let’s adapt to this new knowledge!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Do you want to react? Mention &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; in your tweet or send an email to &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ecologiedelenfance.com/app/download/14155822524/nature_and_values.pdf?t=1492608224&quot;&gt;Natures and value - Pr. Dr. Gerald Hüther&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;#fnref-1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/IGQ9i-xdruc&quot;&gt;Neurobiologie et éducation : conférence du Prof. Dr. Gerald Hüther (VOSTFR)&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;#fnref-2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Ce que les bébés nous apprennent sur le game design]]></title><description><![CDATA[« Entre vingt et cinquante fois par jour, le petit enfant vit un état de grand enthousiasme. (…) Chaque petite tempête d’enthousiasme met en…]]></description><link>https://a-game-studio.com/fr/blog/what-babies-teach-us-about-game-design/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/what-babies-teach-us-about-game-design/</guid><pubDate>Fri, 14 Sep 2018 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;« Entre vingt et cinquante fois par jour, le petit enfant vit un état de grand enthousiasme. (…) Chaque petite tempête d’enthousiasme met en œuvre une sorte d’autodoping cérébral. Ainsi sont produites les substances nécessaires à tous les processus de croissance et de réaménagement des réseaux neuronaux. C’est ce qui explique pourquoi nous progressons si rapidement dans ce que nous faisons avec enthousiasme. Car c’est aussi simple que cela : le cerveau se développe précisément là où il est utilisé avec enthousiasme. » &lt;cite&gt;Pr. Gerald Hüther&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 38.513513513513516%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsSAAALEgHS3X78AAACUElEQVQoz2NgAIJz9xIZGbCAqKAQ1v+TGeBy5cEWJrN8/M4sjAi/s6AyMdx2IjsnF1B8R14aWM1qHw8GhhMPLKDK/zOs31amv3ZPdM+CTRb5BdPWOnes2Hi3evnh48kVDZGzl0csnbso43+jt/P/aXnu/xdtCPi/50ju7f///wmAdK+bnswcNM0YYtSe4wUJW456XV9/1Oz/ot36/1tn2v0Ib5vyNnLa8v9ztnT8X7/E6/+JI57/F66P/x+XaPu3rMzgT8MU/b97t3r+P1+VdbRfXEsC7KT3WRDfnL7U2LL+mOv/pfuc10Qkh7zXdQ76H9fY/t/Fz+vP1QVSf/5fEvjz5pDCn9Yy138HFrn/+/Ym7f/cSVb/Sj3Vfy/zd/w/0dIym2GnKwfQKGaG////Sy3YdfhE05J1/wv71t6Kj2r/5OhR/L8wKvjvznT9fxvT9P9PTRP4f7iz6c+TDUf/zK7y+NPRHPuntjTob3mRzZ+J7QE/p89wfjprpfvH6Ytd+xk+fPggu/rU1eOZ81f9tw+t+u9m0/w/wSPz//p0i98Hi8z+7kyx+pPi7v19jk/R/2MB3f/DnMv/B/pM/O/vW/x/8Wbv/3feR/+//Mzn/5Vn7v/X77f+DXIh/+0Hj21X7T9cffjQ6fq6uvlLZ7R23f4w0en/2zLN/9cqXC59+PixZ0fFpGPL7PLOJPk1nHR3qLkaF9o6e91uv/Y9Z4z6thw1SVt7SNd7zgY1fYbvP39xAw0VB2IBIGYCYrEvf/52XFrcOeu4v2Doai9taQYSAABDtjQivmMfBgAAAABJRU5ErkJggg==&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Dessin d&amp;apos;une jeu de construction pour enfants&quot; title=&quot;Dessin d&amp;apos;une jeu de construction pour enfants&quot; src=&quot;/static/4834195358582425df939e5e915ab852/fcda8/lego-3388163_640.png&quot; srcset=&quot;/static/4834195358582425df939e5e915ab852/12f09/lego-3388163_640.png 148w,
/static/4834195358582425df939e5e915ab852/e4a3f/lego-3388163_640.png 295w,
/static/4834195358582425df939e5e915ab852/fcda8/lego-3388163_640.png 590w,
/static/4834195358582425df939e5e915ab852/6af66/lego-3388163_640.png 640w&quot; sizes=&quot;(max-width: 590px) 100vw, 590px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
  &lt;figcaption&gt;Illustration par &lt;a href=&quot;https://pixabay.com/fr/users/Painter06-3732158/&quot;&gt;Francis Ray&lt;/a&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;sur-le-développement-du-cerveau&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sur-le-d%C3%A9veloppement-du-cerveau&quot; aria-label=&quot;sur le développement du cerveau permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sur le développement du cerveau&lt;/h2&gt;
&lt;p&gt;En plus de nous exposer des mécaniques liées à la croissance, précieuses à connaître pour guider son enfant vers un meilleur épanouissement, la conférence « Neurobiologie et éducation » du Professeur Gerald Hüther éclaire plus généralement sur le fonctionnement du cerveau.&lt;/p&gt;
&lt;p&gt;Des études montrent&lt;sup id=&quot;fnref-1&quot;&gt;&lt;a href=&quot;#fn-1&quot; class=&quot;footnote-ref&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;sup&gt;,&lt;/sup&gt;&lt;sup id=&quot;fnref-2&quot;&gt;&lt;a href=&quot;#fn-2&quot; class=&quot;footnote-ref&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; qu’une poussée d’enthousiasme provoque un déversement de transmetteurs neuroplastiques. De la même façon qu’un engrais, leur rôle est de favoriser le développement du cerveau. Trois choses importantes sont à noter :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;seules les zones &lt;em&gt;actives&lt;/em&gt; du cerveau sont concernées par ce développement,&lt;/li&gt;
&lt;li&gt;cela ne survient que lorsqu’on ressent une émotion puissante,&lt;/li&gt;
&lt;li&gt;cette mécanique fonctionne quel que soit l’âge.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anecdote de l’auteur, pertinente dans notre contexte :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;« Nos jeunes ont, depuis 10 ans, une région du cerveau qui reçoit tant d’engrais qu’elle a déjà doublé de taille : il s’agit de la région qui est chargée de la régulation des mouvements du pouce. &lt;cite&gt;Pr. Gerald Hüther&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ainsi, on retiendra que pour transmettre un message, encourager certains comportements, favoriser la mémorisation d’éléments importants, il faut que le joueur soit touché émotionnellement.&lt;/p&gt;
&lt;h2 id=&quot;sur-lexclusion-sociale&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#sur-lexclusion-sociale&quot; aria-label=&quot;sur lexclusion sociale permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Sur l’exclusion sociale&lt;/h2&gt;
&lt;p&gt;On apprend aussi dans cette conférence que lorsqu’on subit une isolation ou une exclusion sociale cela active les mêmes circuits neuronaux que lorsqu’on nous inflige des souffrances corporelles .&lt;/p&gt;
&lt;p&gt;Sous cette lumière, la dimension inclusive d’un jeu devient primordiale : il n’est pas envisageable de produire un jeu qui crée de la souffrance.&lt;/p&gt;
&lt;p&gt;Tiré de mon expérience, un exemple concret est celui du jeu de société &lt;a href=&quot;https://fr.asmodee.com/fr/games/dixit/&quot;&gt;Dixit&lt;/a&gt;. Dans ce jeu le but est de faire deviner une carte à certains joueurs, mais pas à tous. En conséquence les joueurs ayant déjà des liens sociaux forts ont tendance à resserrer leurs liens encore plus, mais les joueurs plus éloignés du groupe social majoritaire sont en revanche naturellement exclus.&lt;/p&gt;
&lt;figure&gt;
  &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;&gt;
      &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 50%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAwABAv/EABYBAQEBAAAAAAAAAAAAAAAAAAIAAf/aAAwDAQACEAMQAAAB5xkCOSs//8QAGhAAAgMBAQAAAAAAAAAAAAAAAAECERIiMf/aAAgBAQABBQKcqNvKsroXn//EABURAQEAAAAAAAAAAAAAAAAAAAEQ/9oACAEDAQE/ASf/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/AT//xAAYEAEAAwEAAAAAAAAAAAAAAAARAAEQMf/aAAgBAQAGPwITOsrf/8QAGxABAAMBAAMAAAAAAAAAAAAAAQARITFRYXH/2gAIAQEAAT8hJH1swOGVbLjj28yiiDk72ChU/9oADAMBAAIAAwAAABDgL//EABYRAQEBAAAAAAAAAAAAAAAAAAEQEf/aAAgBAwEBPxBYM//EABcRAQEBAQAAAAAAAAAAAAAAAAEAITH/2gAIAQIBAT8QxxJ7f//EABwQAQEAAwADAQAAAAAAAAAAAAERACExQVGBsf/aAAgBAQABPxBFQSxrhrRRsbZ1/cPCfEyPcPuK4gopZzANBR6OAAABADmf/9k=&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;Cartes du Mysterium&quot; title=&quot;Cartes du Mysterium&quot; src=&quot;/static/64de158dd7f29285f7e94321cd6f5893/1c72d/mysterium.jpg&quot; srcset=&quot;/static/64de158dd7f29285f7e94321cd6f5893/a80bd/mysterium.jpg 148w,
/static/64de158dd7f29285f7e94321cd6f5893/1c91a/mysterium.jpg 295w,
/static/64de158dd7f29285f7e94321cd6f5893/1c72d/mysterium.jpg 590w,
/static/64de158dd7f29285f7e94321cd6f5893/80e3c/mysterium.jpg 720w&quot; sizes=&quot;(max-width: 590px) 100vw, 590px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
    &lt;/span&gt;
  &lt;figcaption style=&quot;text-align:center&quot;&gt;Exemple de cartes &amp;quot;vision&amp;quot; de Mysterium&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Fort de ce constat, le tir est corrigé dans &lt;a href=&quot;https://fr.asmodee.com/fr/games/mysterium/&quot;&gt;Mysterium&lt;/a&gt;, identique dans ses mécaniques (faire deviner des cartes), mais dont l’approche collaborative incite naturellement les joueurs à mieux se connaître pour réussir. Les concepteurs ont réussi à conserver une mécanique de jeu vraiment amusante (Dixit reste un très bon jeu !) tout en renversant les relations entre les joueurs : les nouveaux objectifs de jeu promeuvent l’empathie encore davantage (on essaye d’imaginer comment l’autre joueur va percevoir un visuel) et la mécanique discriminante disparait (même si une sous-partie du groupe seulement devine, tout le groupe bénéficie de la découverte).&lt;/p&gt;
&lt;h2 id=&quot;pour-nous-et-pour-tous&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#pour-nous-et-pour-tous&quot; aria-label=&quot;pour nous et pour tous permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Pour nous et pour tous&lt;/h2&gt;
&lt;p&gt;Dans les relations avec nos enfants comme avec nos joueurs, nous gagnons à mieux connaître le fonctionnement du cerveau pour proposer des expériences plus épanouissantes. En tant que concepteurs (mais pas seulement), les neurosciences ont encore probablement beaucoup à nous apprendre. Sachons nous adapter à ces nouvelles connaissances !&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Envie de réagir ? Mentionnez &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; dans votre tweet ou envoyer un mail à &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&quot;fn-1&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://www.ecologiedelenfance.com/app/download/14155822524/nature_and_values.pdf?t=1492608224&quot;&gt;Natures and value - Pr. Dr. Gerald Hüther&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;#fnref-1&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;li id=&quot;fn-2&quot;&gt;
&lt;p&gt;&lt;a href=&quot;https://youtu.be/IGQ9i-xdruc&quot;&gt;Neurobiologie et éducation : conférence du Prof. Dr. Gerald Hüther (VOSTFR)&lt;/a&gt;&lt;/p&gt;
&lt;a href=&quot;#fnref-2&quot; class=&quot;footnote-backref&quot;&gt;↩&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Hacking through shaders]]></title><description><![CDATA[Any sane programmer would teach “Read the documentation, understand what you are doing, and you’ll be able to solve your problems”. While…]]></description><link>https://a-game-studio.com/blog/hacking-through-shaders/</link><guid isPermaLink="false">https://a-game-studio.com/blog/hacking-through-shaders/</guid><pubDate>Mon, 27 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Any sane programmer would teach “Read the documentation, understand what you are doing, and you’ll be able to solve your problems”. While true, there is a flaw : the time required to fully understand something grows bigger and bigger as what you are learning is vast or deep. Sometimes, hacking its way in might be enough, and how fun would life be without a bit of crazyness? let’s hack into shaders !&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/1e21a8b71d904eb4d8c1316559f078e5/test6.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h2 id=&quot;just-a-step-back&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#just-a-step-back&quot; aria-label=&quot;just a step back permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Just a step back&lt;/h2&gt;
&lt;p&gt;Ok yes there ARE things you must know before diving into shaders, here they are :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;A shader contains 3 key parts : declarations, vertex function, and fragment function.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Declarations allow you to drive or configure the shader from scripting.&lt;/li&gt;
&lt;li&gt;Vertex function allows you to affect the 3D world (displacement of vertex)&lt;/li&gt;
&lt;li&gt;Fragment function allows you to affect the rendered pixels on screen.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;A color is represented as a 4 dimensions vector &lt;code class=&quot;language-text&quot;&gt;fixed4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In the fragment function, you manipulate only one pixel at a time.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;frac(float)&lt;/code&gt; function return the decimal part of a float.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;text2D(sampler2D,float2)&lt;/code&gt; gives the pixel color of the texture &lt;code class=&quot;language-text&quot;&gt;sample2D&lt;/code&gt; at the coordinate &lt;code class=&quot;language-text&quot;&gt;float2&lt;/code&gt;. You get this coordinate as input in the fragment function.&lt;/li&gt;
&lt;li&gt;Coordinates are between (0,0) and (1,1).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It may looks very specific if you a new to shaders but this is actually things you’d find early while learning shaders.&lt;/p&gt;
&lt;h2 id=&quot;multiple-layers-of-rendering&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#multiple-layers-of-rendering&quot; aria-label=&quot;multiple layers of rendering permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Multiple layers of rendering&lt;/h2&gt;
&lt;p&gt;I’m working on a game called &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;A Time Paradox&lt;/a&gt; which takes place in a futuristic universe (in a spaceship riding a blackhole horizon). A way to evocate a futuristic world is using something both typical, visual appealing, and quick to create : holograms.&lt;/p&gt;
&lt;p&gt;So here is the idea : we will display a spotlight texture as a background, then animate a glitch texture on the top of it, to simulate scanlines. The plan? Find a simple enough sprite shader as starter, add a glitch texture as parameter on top of the main texture, do fun math to animate the glitch texture&lt;/p&gt;
&lt;h3 id=&quot;find-a-starter-shader&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#find-a-starter-shader&quot; aria-label=&quot;find a starter shader permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Find a starter shader&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : I use Unity and paint.NET as tools but the workflow would work for any engine or technology supporting shaders and any image editor.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On &lt;a href=&quot;https://unity3d.com/fr/get-unity/download/archive&quot;&gt;https://unity3d.com/fr/get-unity/download/archive&lt;/a&gt; you’ll find under “downloads (your platform)” an entry named “integrated shaders”. It contains all built-in shaders of unity and can be copy/pasted/modified in your project. I choose to start with the shader &lt;code class=&quot;language-text&quot;&gt;DefaultResourcesExtra\Unlit\Unlit-Alpha.shader&lt;/code&gt; since i’m working in 2D without lighting, and I want transparency in my result. It looks like :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Unlit alpha-blended shader.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no lighting&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no lightmap support&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no per-material color&lt;/span&gt;

Shader &lt;span class=&quot;token string&quot;&gt;&quot;Unlit/Transparent&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;Properties &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    _MainTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Base (RGB) Trans (A)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
SubShader &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Tags &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Queue&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Transparent&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IgnoreProjector&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;True&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;RenderType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Transparent&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    LOD &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;

    ZWrite Off
    Blend SrcAlpha OneMinusSrcAlpha

    Pass &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        CGPROGRAM
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; vertex vert
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; fragment frag
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; target &lt;span class=&quot;token number&quot;&gt;2.0&lt;/span&gt;
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; multi_compile_fog

            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#&lt;/span&gt;include &lt;span class=&quot;token string&quot;&gt;&quot;UnityCG.cginc&quot;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; appdata_t &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                float4 vertex &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; POSITION&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                float2 texcoord &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; TEXCOORD0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; v2f &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                float4 vertex &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_POSITION&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                float2 texcoord &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; TEXCOORD0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_FOG_COORDS&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                UNITY_VERTEX_OUTPUT_STEREO
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            float4 _MainTex_ST&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            v2f vert &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;appdata_t v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                v2f o&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_SETUP_INSTANCE_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UnityObjectToClipPos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TRANSFORM_TEX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_TRANSFER_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            fixed4 frag &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v2f i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_Target&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                &lt;span class=&quot;token function&quot;&gt;UNITY_APPLY_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fogCoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;        ENDCG
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here we find “Properties”, and both “vert” and “frag” functions. The frag function is basically doing the following thing : lookup the pixel color in &lt;code class=&quot;language-text&quot;&gt;_MainTex&lt;/code&gt; that is located at &lt;code class=&quot;language-text&quot;&gt;i.texcoord&lt;/code&gt; position, run a &lt;code class=&quot;language-text&quot;&gt;UNITY_APPLY_FOG&lt;/code&gt; process we don’t know about, return the color.&lt;/p&gt;
&lt;p&gt;Let’s try this shader already :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;copy/paste file in project asset folder;&lt;/li&gt;
&lt;li&gt;in shader file line 8, rename shader from &lt;code class=&quot;language-text&quot;&gt;Shader Unlit/Transparent&lt;/code&gt; to &lt;code class=&quot;language-text&quot;&gt;Shader Custom/MyHologram&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;in unity editor right click on shader file -&gt; create -&gt; material to create a new material linked with the shader;&lt;/li&gt;
&lt;li&gt;drag and drop the “spotlight” sprite into the scene;&lt;/li&gt;
&lt;li&gt;drag and drop the material from asset folder to the sprite in the scene hierarchy, so that the sprite uses the material configured with our shader.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The “spotlight” sprite? Let’s use this one :&lt;/p&gt;
&lt;div style=&quot;width:250px;margin:auto;&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB7ElEQVQ4y+2Ty27UMBSGj6dIrJAoA6pQ1UpVKULTMpfOJGn3gNruALHiUpUtay4SAp6AXh6BKuPkOJNYArZVF1VfomwRz8Fvx8lkphex6BJL3/z2sX38H8dD7URSZxBb2gOmdsK0jL6XMnUxbpnYII91rLLVNsYtrG2WYKxiuvzWgcO70T5Nhd9oNpQ0sx9SIwppNYUjZpqXEc3HETVY0qJi0eK+WGYpGnEoFjkW95jFHSnFguyLJkcE2zF1U54E9W6q6j1oz/ZLbhb0UuVgRz7G3C2zFlchrEs/UzdAy8vUEvS+watQjUGbBm+IiXWCTNXLsudQGiYCsAYegId+ziODdwb+kHWMV2ejPhXurE2cMI3+FngJXo2gy/7mGCb2OtBqusyFH5OsSP4EfAJvwfsL+ADegS9mjzWkE1Nl7hInCKe3wVcs2gU7jt1z2APbYKpaqXVoVauaG5tSfoA+iEfQiqEGCX6CF25PrZpr3OV18B0cIcEBOLRkuSJ+AI6BXtHJtereMmHF5YTT54j9ASdj/LJo9Rv61CWbOMudpQjigq+i/xG8AY/N0/B1sgF95j7GZy9LrhSJVtz+kebr4ksn//y39UoD6vQk7mNYembd1i7Cq6w9txUnBZUSgjHn9t3icEPx/v63y21/AXwWn2JP+WOxAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;spot&quot; title=&quot;spot&quot; src=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png&quot; srcset=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/12f09/spot.png 148w,
/static/86cfd55c0239b23f0bf31a5c1be79530/e4a3f/spot.png 295w,
/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png 512w&quot; sizes=&quot;(max-width: 512px) 100vw, 512px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;You should end with something like this :
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/f6f7a/step1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 89.86486486486487%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAClUlEQVQ4y5VUW2sTYRDdXNoku0kobbGJFtRcNslms5vrbmJjaIoWtT5Y8iL4YGmhBRUV/AdCwRdB8Qcf50wuJg2ofTh8s5PvO3M7E6PRaKBaraJYLKJQKCxQLJXRCg7g+N3Fb+Wy+Jo+6vW6+uYoFIpwXVdhOI6jhJVKBaVSSR/R5lkuFWHb02/CcWoYPX4kGCEIA/R6PUUYBOgPBgiCEIZt2yApo67DXdi8w7vtdhvdTge+74PVzeE3m+iI32DkXC6HnZ0d7O7uLs5l0JfP5zXLMAynpN0ujo6OMB6PMT48xJOnx+j3+1PCzc1NGIbxV6RSKW0NiTzP01IvL69wcXGB8/NzvD07w3A4nBLyMh9FIpE1orkvnU4rYavVQlvAMoNZtvS1WLIEU8JkMvnPDC3LUkJmEcgQSMLy/wwm1EC3JpxMJko6kKkSzKrdbqF/MBS7NyNMJP6LkHfZP5bZlBJ1ujJtVxQwOH6KDntIKZhbW4iaKcTk0RrSFiKWicz2thKyPMqDMqrVagvwW4Vti4AtkUW67iDr1pFZwNUz6zVgVSvISNCKBA9FGqPRSEmZ3TKYtZac2NhAxveQP32FvZPn2Ht5gpxg7+QF7k5OkXxwH6a0pSqZ6JSl5JtkFDZPoyKNTsQ3EMtk8PDdFYqfPqDwkXiP0pfP2H/zemUo89KWt4RY7LLq0DT10Z1nx/B+/UDt+iucb9do/PyOjOyv6lACkrA5y4S2/gdIG8hBuy7BVmQTkzNdsZHcvwdTyqR9UzZBr60lM9OG5yPoD/TbE5sKuJUOefdApEEd6nYIUW8mcpKx9HXC5fVbsklo65QHuiF8TJJ5T1d6yMvRaBTxeByxWGwF9PG3bDarhNxfSoeP51kt4zfXkfbqwU/yKAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Unity screenshot&quot;
        title=&quot;Unity screenshot&quot;
        src=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/fcda8/step1.png&quot;
        srcset=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/12f09/step1.png 148w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/e4a3f/step1.png 295w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/fcda8/step1.png 590w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/efc66/step1.png 885w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/f6f7a/step1.png 1009w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;add-a-glitch-texture&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#add-a-glitch-texture&quot; aria-label=&quot;add a glitch texture permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Add a glitch texture&lt;/h3&gt;
&lt;p&gt;Let’s add a new glitch texture. We could either find one online, or create it ourself. Here is how I created mine :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a 1024x1024 png file filled with black.&lt;/li&gt;
&lt;li&gt;On a new layer, draw random horizontal white lines of 3 pixels height.&lt;/li&gt;
&lt;li&gt;Duplicate last created layer, apply a “motion blur effect” toward top, 10px&lt;/li&gt;
&lt;li&gt;repeat step 3. a few time until it creates a smooth gradient&lt;/li&gt;
&lt;li&gt;remove the original line layer (the pure white is too hard and sharp)&lt;/li&gt;
&lt;li&gt;merge all remaining layers&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You should get something like that (well, I also tweaked the luminosity curve a bit) :
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/2bef9/scanlines.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4gAAAuIAHVHB4bAAAAZElEQVQ4y63TsQkAIRQE0c1/biKYWoOpIIiBfdiBbVjx3hUxC6+ACVZrLZOUczZJe2+T9N4zSXNOk/TPqN67STrnmMQnR4RJwp+CJ5dSTNK91yQ+OaVkksYYJvHJtVaT1Foz6QMZGXZb5VNICwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;scanlines&quot;
        title=&quot;scanlines&quot;
        src=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/fcda8/scanlines.png&quot;
        srcset=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/12f09/scanlines.png 148w,
/static/e4a0fde4181690628adfe4ea5f61f528/e4a3f/scanlines.png 295w,
/static/e4a0fde4181690628adfe4ea5f61f528/fcda8/scanlines.png 590w,
/static/e4a0fde4181690628adfe4ea5f61f528/efc66/scanlines.png 885w,
/static/e4a0fde4181690628adfe4ea5f61f528/2bef9/scanlines.png 1024w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;To use it into our shader, let’s mimic what is done for the &lt;code class=&quot;language-text&quot;&gt;_MainText&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Line 11, add in the &lt;code class=&quot;language-text&quot;&gt;_GlitchTex&lt;/code&gt; property:&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;Properties &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    _MainTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Base (RGB) Trans (A)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    _GlitchTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Glitch Texture&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Then line 44, add the &lt;code class=&quot;language-text&quot;&gt;_GlitchTex&lt;/code&gt; declaration :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
float4 _MainTex_ST&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;From here, the “Glitch texture” property should appear in the spotlight inspector in Unity. Select the texture you just created (or use mine) as value.&lt;/p&gt;
&lt;p&gt;And… nothing happens. We now need to actually use the texture we declared in the shader code, the fun maths beggins !&lt;/p&gt;
&lt;h3 id=&quot;fun-with-maths&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#fun-with-maths&quot; aria-label=&quot;fun with maths permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Fun with maths&lt;/h3&gt;
&lt;p&gt;To change the rendering of the pixels, the fragment function is the one we should work with :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 frag &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v2f i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_Target
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;UNITY_APPLY_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fogCoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;We want to get the color of our glitch texture, let’s try to copy the function for the &lt;code class=&quot;language-text&quot;&gt;_MainTex&lt;/code&gt;, and mix the 2 colors.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; glitchCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/caabad309bea257b2486557113f3030d/08a84/test1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACJ0lEQVQ4y62TXUhTYRjH3x1H4kXCqCw2CEqCrdaHJoSGS4m67yI1yYjE0iQqgsiMBanFjFVYmJ4p4T460+Zc2/QYOoONCqLRpxfVRd1kLvoQZ2RX/95zznt0qwZddPHj/zz/c/jzvM95DyGE4H/BabUgB252Ys9lGyrtdlTf6EAF34UaysEeByq7u7C3h0ed4EF9vxdHvALq3S40+n2o9Q3geDCAk6KIw8NhHJ2IYG1xMcgkgFeMScZLyosUffZb/5zVkh+nvKb0xePQaDQgpeetqHn6BFXR+9j3IMqIyVrF+mqZGIN6D2MM5Z39jx9BX1CgHJ3Ly4PZ44TJ64bxthNGwQWTQHuhj+FkuFJqBaP7FjaF/DA0NshhGo6TlKC8uRlXfv5A69QHXPyU+CfaEtOwffmMprdvsNRgUKaTjiwVy1auwrV379E7Pw9+dhaOZBKOuSR4laSCg6nkdc98g4vursJqVabLymKhyphYvnsXto0EUdjvwdY7wgKFjDRvwIOigA8bOztA1KBFFpvN9nZYxkSU3B3E9tDQAiVqHQ4oGvTDMi5ihaWUfQguPVCdMn+HBZdmvqIl8REt01MyrUxlqH+B7rn9+xwODQ1muuAkdaEwnz2DndEIykbDKI+MKkzcU3RsRPbLxBB0G9b/bbo/A7P1emzp5WG+fhXrzjUh//QprDlxTFaTrQ1F9HqtrqvNFJa+Q5UlubkZ/9dsnQ7anJyMz38BgRA5HpXDvFAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test1&quot;
        title=&quot;test1&quot;
        src=&quot;/static/caabad309bea257b2486557113f3030d/08a84/test1.png&quot;
        srcset=&quot;/static/caabad309bea257b2486557113f3030d/12f09/test1.png 148w,
/static/caabad309bea257b2486557113f3030d/e4a3f/test1.png 295w,
/static/caabad309bea257b2486557113f3030d/08a84/test1.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Great we mixed the 2 textures into 1 render ! But it looks weird, doesn’t it? The alpha of the first image is overriden by the second texture : we lose the smooth gradient we had and the edges looks wrong. Let’s try using multiply instead of addition to mix the colors.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAq0lEQVQ4y63TXQuDIBQGYDVLU6qboGLtg7n9/5/4zmPFRri1yIuHAyqv5xQyxhiS4kWBfwmiYhR4nk+BQmtkxhxjLbiUS5eJR57aFKFlumW3ZdTPQNowtyusczDu7muMW/FrzweKto106ImyhKxrr5rrhqoKZ3mWxQPTfsMZja66DqrvvaWuddDDANk024H0c+iwHkfv9FV5OYextwNTj/x+Pr+eFp/sCjzgBa1TEYEP1DfWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test2&quot;
        title=&quot;test2&quot;
        src=&quot;/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png&quot;
        srcset=&quot;/static/d4b52bc17f91c31135d469f5293eca65/12f09/test2.png 148w,
/static/d4b52bc17f91c31135d469f5293eca65/e4a3f/test2.png 295w,
/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Not bad, but we barly recognize the original sprite. That said, this colors could look good as an “additional layer”. Let’s add the original color on top of this one.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB5UlEQVQ4y63Ty0sbURQH4MnEJEYjJu1CA6P4lhJEqfMwRnHjs74iXfmKLqSltFURuit0q5QKLkRw4UKSGE184YNWRFp049qFrbSK1rYLpS78A36dO3cmGWvUjYuPczgXztxz71yGYRjcK4PFDIPJBIPZHMWqlDWLJYrVJCZeZ7WCYVkwqcXFcPD8VYIQI4qKBxqJkKIcsoceD2wFBXSHJHG2eZHW1Ij0liZVM9Wq1wKniuTp3qtMdrs6trxN59M2ZPT6wHV1gOvuVGQQPorzdclRp4fiujuQ9bwPjjJJPT8DiYxSkObDKPVPgw/6Y2b8EGa0GIAQCoAPkRiUawGIkTmUTIwjwWbTXwxNpIUIGv+eoe74EA2nx4r6X3onaJAp8bccfx6h+fICWc/6aCMjGxuZJCmuRyhbWYS0OCcLU0thiCpJEaG1hVm415dRNDYa79eJzo7cwX6Uf1yFEA5CnJ+9WSQE99oS7HwpbcKy8RtaMzNR/XUPtSc/UHP4DbX/OzpAzfd9PDn/g5LJCf1FXD9D7SvkTKp2d+DZ2kDl9paiQvNlE57PG3B/WkVyft4dDVXGpCS43g/D9WEEeW+GkPP6JbJfvUDu0AAK373F4+kpcJ3t8UaN35AgT/Gmt2qUn9ht6/8ADMyz7IELYsIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test3&quot;
        title=&quot;test3&quot;
        src=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png&quot;
        srcset=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/12f09/test3.png 148w,
/static/1c86cf46ce6ee67f7b2beddb69753b25/e4a3f/test3.png 295w,
/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hey ! We are getting there !&lt;/p&gt;
&lt;p&gt;Now it’s time to animate the glitch. For this, we need some kind of “time” external variable to calculate from. Every engine provide a way to access some time clock, in Unity we can use &lt;code class=&quot;language-text&quot;&gt;_Time.y&lt;/code&gt;. The idea is to modify the &lt;code class=&quot;language-text&quot;&gt;texcoord&lt;/code&gt; (reminder: it’s a &lt;code class=&quot;language-text&quot;&gt;vector2&lt;/code&gt; between 0,0 and 1,1 for x,y coordinates), to have the y value changed over time and looped between 0 and 1.&lt;/p&gt;
&lt;p&gt;To loop a variable that depends on time between 0 and 1 we can do as follow :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;fixed&lt;/span&gt; scrollValue &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;_Time.y&lt;/code&gt; is a value that consistently increase (elapsed time since start of the game ), &lt;code class=&quot;language-text&quot;&gt;frac()&lt;/code&gt; is keeping only the decimal part of a float (making the value loop between 0 and 1), 0.04 is an arbitrary constant used as a ratio to slow down the scrolling effect. This constant can be exported in a shader property to configure the speed, but let’s keep it inlined for the moment.&lt;/p&gt;
&lt;p&gt;In order to remap the &lt;code class=&quot;language-text&quot;&gt;texcoord&lt;/code&gt; from static to scrolled coordinates, we need to create a new float2 element, and change the y value only so that the glitch scrolls vertically.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    float2 offsetTexCoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.04&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here we keep the x value as is, and we add the current y value with the scrollValue that varies over time. This tells the shader to look at a different vertical position inside the texture over time for a given pixel, and because this vertical position moves slowly it renders the texture “offset” or “shifted”. Here we go :&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
        &lt;source src=&quot;/885403ce0018471ca9d2721563772c9a/test4.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Note that I had to cheat a little to get a perfect looping animation, your hologram should move more slowly that that.&lt;/p&gt;
&lt;h3 id=&quot;we-need-to-go-deeper&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#we-need-to-go-deeper&quot; aria-label=&quot;we need to go deeper permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;We need to go deeper&lt;/h3&gt;
&lt;p&gt;It already looks fine, but out pattern recognition machine (aka. our brain) will quickly find out the repetition and loose interest for the visual quickly. No matter, we got more tricks! Let’s use multiple glitch overlay that run at different speed. Basically we copy/paste the shader code above to extract colors at different positions with different timing. It could write like :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// glitch 1&lt;/span&gt;
float2 offsetTexCoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.33&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// glitch 2&lt;/span&gt;
float2 offsetTexCoord2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;  _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4521&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// glitch 3&lt;/span&gt;
float2 offsetTexCoord3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.2541&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol2 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol3 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And looks like :&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/8d8caa899b6929ed5686da0b93353d02/test5.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Here it looks up 3 different positions from the same glitch texture, then add them like before but multiplied with a constant to soften the effect (else it becomes too bright). As a consequence, my animation capture cannot loop smoothly because it happens very rarely that the 3 glitch layers get back at their original position synchronously. Also, if it makes that the animation in-game looks like it never repeat itself, which is more satisfying to watch.&lt;/p&gt;
&lt;h3 id=&quot;we-need-to-go-deeper-again&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#we-need-to-go-deeper-again&quot; aria-label=&quot;we need to go deeper again permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;We need to go deeper AGAIN&lt;/h3&gt;
&lt;p&gt;This could be over, yet my brain is not fully satisfied. There are still some patterns I recognize sometimes so it can be even better.&lt;/p&gt;
&lt;p&gt;In short : we are adding colors together, which means at any given time for one layer there is always a “minimum” light value (recognized as a white band) which the eye can follow along the way and that will repeat. The fact that there are other lines over it makes it harder to track but not impossible. There is a solution : multiplying the colors together instead of adding them. The consequence is that sometimes the lines overlap (creating brighter lines) and sometimes they get further from each other (fading the lines away).&lt;/p&gt;
&lt;p&gt;The math becomes :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol2 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol3&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Also the texture must be tweaked so that there is more overlapping (the current texture has too much black and overlapping must happens more frequently so that the effect works). From the previous texture, I inverted the color, they played with the luminosity curve until the effect looks right. Here goes the texture and the result :&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/2bef9/lightdust2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4fAAAuHwF47oFfAAAAa0lEQVQ4y63TMQ0AIQBD0SpiuAkSZCABE7AhgbBcDgcEjz0Tf3gCfppqjGGSeu8mKYRgkuacJqnWapJyzibpfV+T+OQYo0n6vs8klVJMUkrJJN17TdJayyQ9z2OSWmsm6ZxjEj8Kfr29t0k/ZVanzn4iXgEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;lightdust2&quot;
        title=&quot;lightdust2&quot;
        src=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/fcda8/lightdust2.png&quot;
        srcset=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/12f09/lightdust2.png 148w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/e4a3f/lightdust2.png 295w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/fcda8/lightdust2.png 590w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/efc66/lightdust2.png 885w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/2bef9/lightdust2.png 1024w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/1e21a8b71d904eb4d8c1316559f078e5/test6.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;As you can see, sometimes lines appear then fade away, if you have done it yourself you can look at it during hours without recognizing any pattern. The effect is now more subtle, intriguing.&lt;/p&gt;
&lt;h2 id=&quot;final-words&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#final-words&quot; aria-label=&quot;final words permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Final words&lt;/h2&gt;
&lt;p&gt;Thank you for reading! I’m working hard on &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;A Time Paradox&lt;/a&gt; so that it looks cool, check it out!&lt;/p&gt;
&lt;p&gt;Want to respond to this article? Made something out of it? Let me know!&lt;br&gt;
PM or mention &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt; or drop a message at &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;. I’ll re-tweet your work.&lt;/p&gt;
&lt;p&gt;Happy hacking!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Time Paradox]]></title><description><![CDATA[Your are stuck in a timeloop. Infiltrate against yourself to escape paradoxes ! I must hide from my past selves. If one see me… A time…]]></description><link>https://a-game-studio.com/projects/a-time-paradox/</link><guid isPermaLink="false">https://a-game-studio.com/projects/a-time-paradox/</guid><pubDate>Mon, 27 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Your are stuck in a timeloop. Infiltrate against yourself to escape paradoxes !&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
        &lt;source src=&quot;/10a350b31ff593eda1b2f6875ff7c13e/atimeparadox_loop.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;I must hide from my past selves. If one see me…&lt;br&gt;
&lt;cite&gt;A time traveller&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;startButton&quot;&gt;
    &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;Visit website&lt;/a&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Trafiquer un shader]]></title><description><![CDATA[N’importe quel programmeur sain d’esprit enseignerait “Lisez la documentation, comprenez ce que vous faites, et vous serez capable de…]]></description><link>https://a-game-studio.com/fr/blog/hacking-through-shaders/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/hacking-through-shaders/</guid><pubDate>Mon, 27 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;N’importe quel programmeur sain d’esprit enseignerait “Lisez la documentation, comprenez ce que vous faites, et vous serez capable de résoudre vos problèmes”. Tout à fait vrai ! Mais il y a un défaut : plus le sujet est vaste ou profond, plus le temps nécessaire à son apprentissage est grand. Parfois, “hacker” son chemin pourrait suffire. Et puis la vie est plus amusante avec un brin de folie non ? Trafiquons les shaders !&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/1e21a8b71d904eb4d8c1316559f078e5/test6.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;h2 id=&quot;un-pas-en-arrière&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#un-pas-en-arri%C3%A8re&quot; aria-label=&quot;un pas en arrière permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Un pas en arrière&lt;/h2&gt;
&lt;p&gt;Ok oui il y a des choses que vous devez savoir avant de plonger dans les shaders, les voici :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Un shader contient 3 parties importantes : les déclarations, la fonction &lt;code class=&quot;language-text&quot;&gt;vertex&lt;/code&gt; et la fonction &lt;code class=&quot;language-text&quot;&gt;fragment&lt;/code&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les déclarations vous permettent de piloter ou de configurer le shader à partir d’un script.&lt;/li&gt;
&lt;li&gt;La fonction &lt;code class=&quot;language-text&quot;&gt;vertex&lt;/code&gt; vous permet de manipuler le monde 3D (déplacement de vectrices).&lt;/li&gt;
&lt;li&gt;La fonction &lt;code class=&quot;language-text&quot;&gt;fragment&lt;/code&gt; vous permet de manipuler les pixels rendus à l’écran.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Une couleur est représentée par un vecteur à 4 dimensions &lt;code class=&quot;language-text&quot;&gt;fixed4&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Dans la fonction &lt;code class=&quot;language-text&quot;&gt;fragment&lt;/code&gt;, vous ne manipulez qu’un seul pixel à la fois.&lt;/li&gt;
&lt;li&gt;La fonction &lt;code class=&quot;language-text&quot;&gt;frac(float)&lt;/code&gt; renvoie la partie décimale d’un nombre à virgule flottante.&lt;/li&gt;
&lt;li&gt;&lt;code class=&quot;language-text&quot;&gt;text2D(sampler2D,float2)&lt;/code&gt; donne la couleur des pixels de la texture &lt;code class=&quot;language-text&quot;&gt;sample2D&lt;/code&gt; à la coordonnée &lt;code class=&quot;language-text&quot;&gt;float2&lt;/code&gt;. Vous obtenez cette coordonnée en paramètre d’entrée dans la fonction &lt;code class=&quot;language-text&quot;&gt;fragment&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Les coordonnées sont comprises entre (0,0) et (1,1).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ça peut sembler très spécifique si les shaders sont nouveaux pour vous, mais ce sont en fait des choses que vous trouveriez tôt dans votre apprentissage des shaders.&lt;/p&gt;
&lt;h2 id=&quot;plusieurs-couches-de-rendu&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#plusieurs-couches-de-rendu&quot; aria-label=&quot;plusieurs couches de rendu permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Plusieurs couches de rendu&lt;/h2&gt;
&lt;p&gt;Je travaille sur un jeu appelé &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;A Time Paradox&lt;/a&gt; qui se déroule dans un univers futuriste (dans un vaisseau spatial chevauchant un horizon de trou noir). Une façon d’évoquer un monde futuriste est d’utiliser quelque chose de typique, attrayant et rapide à créer : des hologrammes.&lt;/p&gt;
&lt;p&gt;Voici l’idée : nous allons afficher une texture de projecteur (spotlight) en arrière-plan, puis animer une texture de bruit (glitch) sur le dessus pour simuler des lignes de balayage. Le plan ? Trouver un shader 2D assez simple comme point de départ, puis ajouter une texture de glitch par dessus la texture principale. Enfin, s’amuser avec des maths pour animer la texture de glitch.&lt;/p&gt;
&lt;p&gt;En avant !&lt;/p&gt;
&lt;h3 id=&quot;shader-de-départ&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#shader-de-d%C3%A9part&quot; aria-label=&quot;shader de départ permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Shader de départ&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : J’utilise Unity et paint.NET comme outils mais la façon de faire fonctionnerait pour n’importe quel moteur ou technologie supportant les shaders et n’importe quel éditeur d’images.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sur &lt;a href=&quot;https://unity3d.com/fr/get-unity/download/archive&quot;&gt;https://unity3d.com/fr/get-unity/download/archive&lt;/a&gt; vous trouverez sous “téléchargements (votre plate-forme)” une entrée nommée “shaders intégrés”. Il contient tous les shaders de Unity et ils peuvent être copié/collé/modifié dans votre projet. J’ai choisi de commencer avec le shader &lt;code class=&quot;language-text&quot;&gt;DefaultResourcesExtra\Unlit\Unlit-Alpha.shader&lt;/code&gt; puisque je travaille en 2D sans éclairage et avec transparence. Il ressemble à ça :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Unlit alpha-blended shader.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no lighting&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no lightmap support&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// - no per-material color&lt;/span&gt;

Shader &lt;span class=&quot;token string&quot;&gt;&quot;Unlit/Transparent&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;Properties &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    _MainTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Base (RGB) Trans (A)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
SubShader &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    Tags &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Queue&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Transparent&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IgnoreProjector&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;True&quot;&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;RenderType&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Transparent&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    LOD &lt;span class=&quot;token number&quot;&gt;100&lt;/span&gt;

    ZWrite Off
    Blend SrcAlpha OneMinusSrcAlpha

    Pass &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        CGPROGRAM
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; vertex vert
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; fragment frag
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; target &lt;span class=&quot;token number&quot;&gt;2.0&lt;/span&gt;
            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#pragma&lt;/span&gt; multi_compile_fog

            &lt;span class=&quot;token preprocessor builtin&quot;&gt;#&lt;/span&gt;include &lt;span class=&quot;token string&quot;&gt;&quot;UnityCG.cginc&quot;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; appdata_t &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                float4 vertex &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; POSITION&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                float2 texcoord &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; TEXCOORD0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                UNITY_VERTEX_INPUT_INSTANCE_ID
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; v2f &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                float4 vertex &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_POSITION&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                float2 texcoord &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; TEXCOORD0&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_FOG_COORDS&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                UNITY_VERTEX_OUTPUT_STEREO
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            &lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            float4 _MainTex_ST&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

            v2f vert &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;appdata_t v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                v2f o&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_SETUP_INSTANCE_ID&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;UnityObjectToClipPos&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TRANSFORM_TEX&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token function&quot;&gt;UNITY_TRANSFER_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;vertex&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; o&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            fixed4 frag &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v2f i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_Target&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                &lt;span class=&quot;token function&quot;&gt;UNITY_APPLY_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fogCoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;                &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/span&gt;        ENDCG
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On trouve ici les “Properties”, ainsi que les fonctions “vert” et “frag”. La fonction frag fait globalement la chose suivante : rechercher la couleur du pixel dans &lt;code class=&quot;language-text&quot;&gt;_MainTex&lt;/code&gt; qui est situé à la position &lt;code class=&quot;language-text&quot;&gt;i.texcoord&lt;/code&gt;, exécuter un processus &lt;code class=&quot;language-text&quot;&gt;UNITY_APPLY_FOG_FOG&lt;/code&gt; que nous ne connaissons pas, retourner la couleur.&lt;/p&gt;
&lt;p&gt;Avant tout, faisons fonctionner ce shader :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;copier/coller le fichier shader dans le dossier assets du projet;&lt;/li&gt;
&lt;li&gt;dans le fichier shader ligne 8, renommer le shader de &lt;code class=&quot;language-text&quot;&gt;Shader Unlit/Transparent&lt;/code&gt; en &lt;code class=&quot;language-text&quot;&gt;Shader Custom/MyHologram&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;dans l’éditeur de Unity, cliquez avec le bouton droit de la souris sur le fichier shader -&gt; create -&gt; material pour créer un nouveau material associé au shader ;&lt;/li&gt;
&lt;li&gt;créer (voir ci-dessous), puis glisser-déposer le sprite “spotlight” depuis les assets vers la scène ;&lt;/li&gt;
&lt;li&gt;glisser-déposer le material du dossier asset vers le sprite dans la hiérarchie de la scène pour que le sprite utilise le material configuré avec notre shader.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le sprite “spotlight” ? Utilisons celui là :&lt;/p&gt;
&lt;div style=&quot;width:250px;margin:auto;&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-wrapper&quot; style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 512px; &quot;&gt;
      &lt;a class=&quot;gatsby-resp-image-link&quot; href=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png&quot; style=&quot;display: block&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
    &lt;span class=&quot;gatsby-resp-image-background-image&quot; style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&amp;apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4jAAAuIwF4pT92AAAB7ElEQVQ4y+2Ty27UMBSGj6dIrJAoA6pQ1UpVKULTMpfOJGn3gNruALHiUpUtay4SAp6AXh6BKuPkOJNYArZVF1VfomwRz8Fvx8lkphex6BJL3/z2sX38H8dD7URSZxBb2gOmdsK0jL6XMnUxbpnYII91rLLVNsYtrG2WYKxiuvzWgcO70T5Nhd9oNpQ0sx9SIwppNYUjZpqXEc3HETVY0qJi0eK+WGYpGnEoFjkW95jFHSnFguyLJkcE2zF1U54E9W6q6j1oz/ZLbhb0UuVgRz7G3C2zFlchrEs/UzdAy8vUEvS+watQjUGbBm+IiXWCTNXLsudQGiYCsAYegId+ziODdwb+kHWMV2ejPhXurE2cMI3+FngJXo2gy/7mGCb2OtBqusyFH5OsSP4EfAJvwfsL+ADegS9mjzWkE1Nl7hInCKe3wVcs2gU7jt1z2APbYKpaqXVoVauaG5tSfoA+iEfQiqEGCX6CF25PrZpr3OV18B0cIcEBOLRkuSJ+AI6BXtHJtereMmHF5YTT54j9ASdj/LJo9Rv61CWbOMudpQjigq+i/xG8AY/N0/B1sgF95j7GZy9LrhSJVtz+kebr4ksn//y39UoD6vQk7mNYembd1i7Cq6w9txUnBZUSgjHn9t3icEPx/v63y21/AXwWn2JP+WOxAAAAAElFTkSuQmCC&amp;apos;); background-size: cover; display: block;&quot;&gt;&lt;/span&gt;
  &lt;img class=&quot;gatsby-resp-image-image&quot; alt=&quot;spot&quot; title=&quot;spot&quot; src=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png&quot; srcset=&quot;/static/86cfd55c0239b23f0bf31a5c1be79530/12f09/spot.png 148w,
/static/86cfd55c0239b23f0bf31a5c1be79530/e4a3f/spot.png 295w,
/static/86cfd55c0239b23f0bf31a5c1be79530/01e7c/spot.png 512w&quot; sizes=&quot;(max-width: 512px) 100vw, 512px&quot; style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot; loading=&quot;lazy&quot;&gt;
  &lt;/a&gt;
    &lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;Cela devrait donner le résultat suivant :
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/f6f7a/step1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 89.86486486486487%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAClUlEQVQ4y5VUW2sTYRDdXNoku0kobbGJFtRcNslms5vrbmJjaIoWtT5Y8iL4YGmhBRUV/AdCwRdB8Qcf50wuJg2ofTh8s5PvO3M7E6PRaKBaraJYLKJQKCxQLJXRCg7g+N3Fb+Wy+Jo+6vW6+uYoFIpwXVdhOI6jhJVKBaVSSR/R5lkuFWHb02/CcWoYPX4kGCEIA/R6PUUYBOgPBgiCEIZt2yApo67DXdi8w7vtdhvdTge+74PVzeE3m+iI32DkXC6HnZ0d7O7uLs5l0JfP5zXLMAynpN0ujo6OMB6PMT48xJOnx+j3+1PCzc1NGIbxV6RSKW0NiTzP01IvL69wcXGB8/NzvD07w3A4nBLyMh9FIpE1orkvnU4rYavVQlvAMoNZtvS1WLIEU8JkMvnPDC3LUkJmEcgQSMLy/wwm1EC3JpxMJko6kKkSzKrdbqF/MBS7NyNMJP6LkHfZP5bZlBJ1ujJtVxQwOH6KDntIKZhbW4iaKcTk0RrSFiKWicz2thKyPMqDMqrVagvwW4Vti4AtkUW67iDr1pFZwNUz6zVgVSvISNCKBA9FGqPRSEmZ3TKYtZac2NhAxveQP32FvZPn2Ht5gpxg7+QF7k5OkXxwH6a0pSqZ6JSl5JtkFDZPoyKNTsQ3EMtk8PDdFYqfPqDwkXiP0pfP2H/zemUo89KWt4RY7LLq0DT10Z1nx/B+/UDt+iucb9do/PyOjOyv6lACkrA5y4S2/gdIG8hBuy7BVmQTkzNdsZHcvwdTyqR9UzZBr60lM9OG5yPoD/TbE5sKuJUOefdApEEd6nYIUW8mcpKx9HXC5fVbsklo65QHuiF8TJJ5T1d6yMvRaBTxeByxWGwF9PG3bDarhNxfSoeP51kt4zfXkfbqwU/yKAAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;Unity screenshot&quot;
        title=&quot;Unity screenshot&quot;
        src=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/fcda8/step1.png&quot;
        srcset=&quot;/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/12f09/step1.png 148w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/e4a3f/step1.png 295w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/fcda8/step1.png 590w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/efc66/step1.png 885w,
/static/ee36889d92e1a39aa6d0b8b9b3c03b1e/f6f7a/step1.png 1009w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;h3 id=&quot;ajouter-une-texture-de-glitch&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#ajouter-une-texture-de-glitch&quot; aria-label=&quot;ajouter une texture de glitch permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Ajouter une texture de glitch&lt;/h3&gt;
&lt;p&gt;Ajoutons une nouvelle texture de glitch. Nous pourrions soit en trouver une en ligne, soit la créer nous-même. Voici comment j’ai créé la mienne :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Créez un fichier png 1024x1024 entièrement noir.&lt;/li&gt;
&lt;li&gt;Sur un nouveau calque, tracez au hasard des lignes blanches horizontales de 3 pixels de hauteur.&lt;/li&gt;
&lt;li&gt;Dupliquer le dernier calque créé, appliquer un “effet de flou de mouvement” vers le haut de 10px&lt;/li&gt;
&lt;li&gt;Répétez l’étape 3. quelques fois jusqu’à avoir un dégradé lisse.&lt;/li&gt;
&lt;li&gt;Enlever la couche de ligne d’origine (le blanc pur est trop dur et tranchant).&lt;/li&gt;
&lt;li&gt;Fusionner toutes les couches restantes.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Vous devriez obtenir quelque chose comme ça (j’ai aussi un peu modifié la courbe de luminosité) :
&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/2bef9/scanlines.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4gAAAuIAHVHB4bAAAAZElEQVQ4y63TsQkAIRQE0c1/biKYWoOpIIiBfdiBbVjx3hUxC6+ACVZrLZOUczZJe2+T9N4zSXNOk/TPqN67STrnmMQnR4RJwp+CJ5dSTNK91yQ+OaVkksYYJvHJtVaT1Foz6QMZGXZb5VNICwAAAABJRU5ErkJggg==&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;scanlines&quot;
        title=&quot;scanlines&quot;
        src=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/fcda8/scanlines.png&quot;
        srcset=&quot;/static/e4a0fde4181690628adfe4ea5f61f528/12f09/scanlines.png 148w,
/static/e4a0fde4181690628adfe4ea5f61f528/e4a3f/scanlines.png 295w,
/static/e4a0fde4181690628adfe4ea5f61f528/fcda8/scanlines.png 590w,
/static/e4a0fde4181690628adfe4ea5f61f528/efc66/scanlines.png 885w,
/static/e4a0fde4181690628adfe4ea5f61f528/2bef9/scanlines.png 1024w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pour l’utiliser dans notre shader, recopions ce qui est fait pour le &lt;code class=&quot;language-text&quot;&gt;_MainText&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ligne 11, ajoutons la propriété &lt;code class=&quot;language-text&quot;&gt;_GlitchTex&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;Properties &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    _MainTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Base (RGB) Trans (A)&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    _GlitchTex &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;Glitch Texture&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;D&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;white&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis ligne 44, ajouter la déclaration &lt;code class=&quot;language-text&quot;&gt;_GlitchTex&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _MainTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;sampler2D&lt;/span&gt; _GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
float4 _MainTex_ST&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A partir de ce point, la propriété “Glitch texture” devrait apparaître dans l’inspecteur du sprite “spotlight” dans Unity. Sélectionnez la texture que vous venez de créer (ou utilisez la mienne) comme valeur.&lt;/p&gt;
&lt;p&gt;Et… il ne se passe rien. En effet, nous devons maintenant utiliser au niveau du rendu la texture que nous avons déclarée dans le code du shader. Que les maths commencent !&lt;/p&gt;
&lt;h3 id=&quot;maths-et-fun&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#maths-et-fun&quot; aria-label=&quot;maths et fun permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Maths et fun&lt;/h3&gt;
&lt;p&gt;Pour changer le rendu des pixels, la fonction &lt;code class=&quot;language-text&quot;&gt;fragment&lt;/code&gt; est celle que nous devons modifier :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 frag &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;v2f i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; SV_Target
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;UNITY_APPLY_FOG&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;fogCoord&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; col&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L’objectif est d’afficher la couleur de notre texture “glitch”, essayons de copier le code utilisé pour &lt;code class=&quot;language-text&quot;&gt;_MainTex&lt;/code&gt; et de mélanger les 2 couleurs.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; glitchCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/caabad309bea257b2486557113f3030d/08a84/test1.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAACJ0lEQVQ4y62TXUhTYRjH3x1H4kXCqCw2CEqCrdaHJoSGS4m67yI1yYjE0iQqgsiMBanFjFVYmJ4p4T460+Zc2/QYOoONCqLRpxfVRd1kLvoQZ2RX/95zznt0qwZddPHj/zz/c/jzvM95DyGE4H/BabUgB252Ys9lGyrtdlTf6EAF34UaysEeByq7u7C3h0ed4EF9vxdHvALq3S40+n2o9Q3geDCAk6KIw8NhHJ2IYG1xMcgkgFeMScZLyosUffZb/5zVkh+nvKb0xePQaDQgpeetqHn6BFXR+9j3IMqIyVrF+mqZGIN6D2MM5Z39jx9BX1CgHJ3Ly4PZ44TJ64bxthNGwQWTQHuhj+FkuFJqBaP7FjaF/DA0NshhGo6TlKC8uRlXfv5A69QHXPyU+CfaEtOwffmMprdvsNRgUKaTjiwVy1auwrV379E7Pw9+dhaOZBKOuSR4laSCg6nkdc98g4vursJqVabLymKhyphYvnsXto0EUdjvwdY7wgKFjDRvwIOigA8bOztA1KBFFpvN9nZYxkSU3B3E9tDQAiVqHQ4oGvTDMi5ihaWUfQguPVCdMn+HBZdmvqIl8REt01MyrUxlqH+B7rn9+xwODQ1muuAkdaEwnz2DndEIykbDKI+MKkzcU3RsRPbLxBB0G9b/bbo/A7P1emzp5WG+fhXrzjUh//QprDlxTFaTrQ1F9HqtrqvNFJa+Q5UlubkZ/9dsnQ7anJyMz38BgRA5HpXDvFAAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test1&quot;
        title=&quot;test1&quot;
        src=&quot;/static/caabad309bea257b2486557113f3030d/08a84/test1.png&quot;
        srcset=&quot;/static/caabad309bea257b2486557113f3030d/12f09/test1.png 148w,
/static/caabad309bea257b2486557113f3030d/e4a3f/test1.png 295w,
/static/caabad309bea257b2486557113f3030d/08a84/test1.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Super, nous avons mélangé les 2 textures en 1 rendu ! Mais ça a l’air bizarre, n’est-ce pas ? L’alpha de la première image semble ne plus fonctionner : le dégradé lisse que nous avions est perdu et les bords ont l’air faux. Essayons de multiplier au lieu d’additionner pour mélanger les couleurs.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAq0lEQVQ4y63TXQuDIBQGYDVLU6qboGLtg7n9/5/4zmPFRri1yIuHAyqv5xQyxhiS4kWBfwmiYhR4nk+BQmtkxhxjLbiUS5eJR57aFKFlumW3ZdTPQNowtyusczDu7muMW/FrzweKto106ImyhKxrr5rrhqoKZ3mWxQPTfsMZja66DqrvvaWuddDDANk024H0c+iwHkfv9FV5OYextwNTj/x+Pr+eFp/sCjzgBa1TEYEP1DfWAAAAAElFTkSuQmCC&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test2&quot;
        title=&quot;test2&quot;
        src=&quot;/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png&quot;
        srcset=&quot;/static/d4b52bc17f91c31135d469f5293eca65/12f09/test2.png 148w,
/static/d4b52bc17f91c31135d469f5293eca65/e4a3f/test2.png 295w,
/static/d4b52bc17f91c31135d469f5293eca65/08a84/test2.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pas mal, mais on ne reconnait pas le sprite d’origine. Cela dit, on pourrait utiliser ce résultat comme “couche supplémentaire” non ? Additionnons ce rendu (&lt;code class=&quot;language-text&quot;&gt;mainCol * glitchCol&lt;/code&gt;) avec la couleur d’origine (&lt;code class=&quot;language-text&quot;&gt;mainCol&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight has-highlighted-lines&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;gatsby-highlight-code-line&quot;&gt;    fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 460px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 62.83783783783784%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAB5UlEQVQ4y63Ty0sbURQH4MnEJEYjJu1CA6P4lhJEqfMwRnHjs74iXfmKLqSltFURuit0q5QKLkRw4UKSGE184YNWRFp049qFrbSK1rYLpS78A36dO3cmGWvUjYuPczgXztxz71yGYRjcK4PFDIPJBIPZHMWqlDWLJYrVJCZeZ7WCYVkwqcXFcPD8VYIQI4qKBxqJkKIcsoceD2wFBXSHJHG2eZHW1Ij0liZVM9Wq1wKniuTp3qtMdrs6trxN59M2ZPT6wHV1gOvuVGQQPorzdclRp4fiujuQ9bwPjjJJPT8DiYxSkObDKPVPgw/6Y2b8EGa0GIAQCoAPkRiUawGIkTmUTIwjwWbTXwxNpIUIGv+eoe74EA2nx4r6X3onaJAp8bccfx6h+fICWc/6aCMjGxuZJCmuRyhbWYS0OCcLU0thiCpJEaG1hVm415dRNDYa79eJzo7cwX6Uf1yFEA5CnJ+9WSQE99oS7HwpbcKy8RtaMzNR/XUPtSc/UHP4DbX/OzpAzfd9PDn/g5LJCf1FXD9D7SvkTKp2d+DZ2kDl9paiQvNlE57PG3B/WkVyft4dDVXGpCS43g/D9WEEeW+GkPP6JbJfvUDu0AAK373F4+kpcJ3t8UaN35AgT/Gmt2qUn9ht6/8ADMyz7IELYsIAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;test3&quot;
        title=&quot;test3&quot;
        src=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png&quot;
        srcset=&quot;/static/1c86cf46ce6ee67f7b2beddb69753b25/12f09/test3.png 148w,
/static/1c86cf46ce6ee67f7b2beddb69753b25/e4a3f/test3.png 295w,
/static/1c86cf46ce6ee67f7b2beddb69753b25/08a84/test3.png 460w&quot;
        sizes=&quot;(max-width: 460px) 100vw, 460px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hé ! On s’approche !&lt;/p&gt;
&lt;p&gt;Maintenant, il est temps d’animer le glitch. Pour cela, nous aurons besoin d’une sorte de variable basée sur le temps. Chaque moteur fournit un moyen d’accéder à une horloge, Unity fournit &lt;code class=&quot;language-text&quot;&gt;_Time.y&lt;/code&gt;. L’idée est de modifier le &lt;code class=&quot;language-text&quot;&gt;texcoord&lt;/code&gt; (rappel : c’est un &lt;code class=&quot;language-text&quot;&gt;vector2&lt;/code&gt; entre 0,0 et 1,1 pour les coordonnées x,y), pour que la valeur y soit modifiée dans le temps et bouclée entre 0 et 1 pour faire un défilement infini.&lt;/p&gt;
&lt;p&gt;Pour boucler une variable qui dépend du temps entre 0 et 1, nous pouvons faire comme suit :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    &lt;span class=&quot;token keyword&quot;&gt;fixed&lt;/span&gt; scrollValue &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.04&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-text&quot;&gt;_Time.y&lt;/code&gt; est une valeur qui augmente indéfiniement (temps écoulé en secondes depuis de début du jeu), &lt;code class=&quot;language-text&quot;&gt;frac()&lt;/code&gt; ne conserve que la partie décimale d’un nombre à virgule flottante (faisant boucler la valeur entre 0 et 1), 0.04 est une constante arbitraire utilisée comme ratio pour ralentir l’effet de défilement. Cette constante pourrait être extraite comme propriété du shader pour configurer la vitesse, mais gardons-la inline pour le moment.&lt;/p&gt;
&lt;p&gt;Afin de remapper la position statique de &lt;code class=&quot;language-text&quot;&gt;texcoord&lt;/code&gt; dans sa version “scrollée”, nous devons créer un nouveau texcoord &lt;code class=&quot;language-text&quot;&gt;float2&lt;/code&gt;, et changer sa valeur y pour appliquer le défilement.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;    float2 offsetTexCoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
        i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.04&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ici, on conserve la valeur x tel quel, et on ajoute notre valeur de scroll qui varie en fonction du temps. Ça indique au shader, pour un pixel donné, de regarder une position verticale différente à l’intérieur de la texture au fil du temps. Parce que cette position verticale se déplace lentement, elle rend la texture “décalée”. Et c’est parti !&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
        &lt;source src=&quot;/885403ce0018471ca9d2721563772c9a/test4.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Remarque: j’ai triché un peu pour obtenir une boucle d’animation parfaite, votre hologramme devrait se déplacer un peu moins vite.&lt;/p&gt;
&lt;h3 id=&quot;we-need-to-go-deeper-nous-devons-aller-plus-loin&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#we-need-to-go-deeper-nous-devons-aller-plus-loin&quot; aria-label=&quot;we need to go deeper nous devons aller plus loin permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;We need to go deeper (Nous devons aller plus loin)&lt;/h3&gt;
&lt;p&gt;Le rendu est déjà bien, mais notre machine à reconnaissance de motifs (notre cerveau) trouvera rapidement la répétition et perdra rapidement son intérêt pour le visuel. Peu importe, nous avons plus d’un tour dans notre sac ! On pourra par exemple utiliser plusieurs couches de glitch qui défilent à des vitesses différentes. Dans l’idée, on copie/colle le même code que précédemment mais avec des décalages différents pour extraire les couleurs à des positions différentes dans le temps.&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 mainCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_MainTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// glitch 1&lt;/span&gt;
float2 offsetTexCoord &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.33&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// glitch 2&lt;/span&gt;
float2 offsetTexCoord2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;  _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4521&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// glitch 3&lt;/span&gt;
float2 offsetTexCoord3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
    i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;x&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token function&quot;&gt;frac&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;texcoord&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; _Time&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;y &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.2541&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
fixed4 glitchCol3 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;tex2D&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;_GlitchTex&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; offsetTexCoord3&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol2 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.2&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol3 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le résultat :&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/8d8caa899b6929ed5686da0b93353d02/test5.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Ici le shader va lire dans la texture à 3 positions différentes, chacune de ces positions défilant à une vitesse différente. Ensuite, on additionne toutes les couleurs obtenues mais en appliquant une constante pour adoucir le rendu (sinon le rendu est trop lumineux). Autre conséquence, le rendu animé ne peut plus boucler de façon fluide comme avant, car il est extrêmement rare que les 3 couches de glitch retrouvent leur position initiale au même moment. Ainsi, dans le jeu, is smeble que l’animation ne se répête jamais ce qui la rends plus intéressante à regarder.&lt;/p&gt;
&lt;h3 id=&quot;we-need-to-go-deeper-again-nous-devons-aller-encore-plus-loin&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#we-need-to-go-deeper-again-nous-devons-aller-encore-plus-loin&quot; aria-label=&quot;we need to go deeper again nous devons aller encore plus loin permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;We need to go deeper AGAIN (Nous devons aller ENCORE plus loin)&lt;/h3&gt;
&lt;p&gt;On pourrait s’arrêter là, mais mon cerveau n’est pas encore satisfait. On observe encore certains motifs, il y a mieux à faire.&lt;/p&gt;
&lt;p&gt;L’idée en bref : plutôt que d’additionner les couleurs des 3 couches, multiplions les ! En effet, il y a toujours une valeur lumineuse “minimale” (qu’on visualise comme une bande blanche) que l’œil peut suivre le long du chemin et qui se répétera. Le fait que les lignes se croisent rend le suivi plus difficile mais pas impossible.&lt;br&gt;
Alors qu’en multipliant les 3 valeurs, parfois les lignes se chevaucheront et créeront des lignes plus brillantes, et parfois elles s’éloigneront et les lignes disparaitront en fondu.&lt;/p&gt;
&lt;p&gt;Niveau maths le changement est assez direct :&lt;/p&gt;
&lt;div class=&quot;gatsby-highlight&quot; data-language=&quot;glsl&quot;&gt;&lt;pre class=&quot;language-glsl&quot;&gt;&lt;code class=&quot;language-glsl&quot;&gt;fixed4 col &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; mainCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol2 &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; glitchCol3&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par contre il est nécessaire de revoir la texutre pour qu’elle soutienne l’idée. Pour que le rendu soit intéressant il faut que les lignes se superposent plus souvent (lignes plus larges, luminosité plus claire). En repartant de la texture précédente, j’ai inversé les couleurs puis manipulé la courbe de luminosité jusqu’à ce que le rendu me plaise.&lt;/p&gt;
&lt;p&gt;&lt;span
      class=&quot;gatsby-resp-image-wrapper&quot;
      style=&quot;position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 590px; &quot;
    &gt;
      &lt;a
    class=&quot;gatsby-resp-image-link&quot;
    href=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/2bef9/lightdust2.png&quot;
    style=&quot;display: block&quot;
    target=&quot;_blank&quot;
    rel=&quot;noopener&quot;
  &gt;
    &lt;span
    class=&quot;gatsby-resp-image-background-image&quot;
    style=&quot;padding-bottom: 100%; position: relative; bottom: 0; left: 0; background-image: url(&apos;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAC4fAAAuHwF47oFfAAAAa0lEQVQ4y63TMQ0AIQBD0SpiuAkSZCABE7AhgbBcDgcEjz0Tf3gCfppqjGGSeu8mKYRgkuacJqnWapJyzibpfV+T+OQYo0n6vs8klVJMUkrJJN17TdJayyQ9z2OSWmsm6ZxjEj8Kfr29t0k/ZVanzn4iXgEAAAAASUVORK5CYII=&apos;); background-size: cover; display: block;&quot;
  &gt;&lt;/span&gt;
  &lt;img
        class=&quot;gatsby-resp-image-image&quot;
        alt=&quot;lightdust2&quot;
        title=&quot;lightdust2&quot;
        src=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/fcda8/lightdust2.png&quot;
        srcset=&quot;/static/9a7a6cc1c105cd1ca473eadc46ed386d/12f09/lightdust2.png 148w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/e4a3f/lightdust2.png 295w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/fcda8/lightdust2.png 590w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/efc66/lightdust2.png 885w,
/static/9a7a6cc1c105cd1ca473eadc46ed386d/2bef9/lightdust2.png 1024w&quot;
        sizes=&quot;(max-width: 590px) 100vw, 590px&quot;
        style=&quot;width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;&quot;
        loading=&quot;lazy&quot;
      /&gt;
  &lt;/a&gt;
    &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Et voilà le résultat final :&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
&lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
    &lt;source src=&quot;/1e21a8b71d904eb4d8c1316559f078e5/test6.mp4&quot; type=&quot;video/mp4&quot; /&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Comme vous pouvez le voir, parfois les lignes apparaissent puis s’estompent. Si vous êtes arrivés jusque là dans votre implémentation vous pouvez constater que les lignes apparaissent et disparaissent à des endroits qui semblent toujours différents, et on peut l’observer pendant des heures sans trouver de répétition dans les motifs. L’effet est maintenant plus subtil, plus intrigant !&lt;/p&gt;
&lt;h2 id=&quot;mots-de-la-fin&quot; style=&quot;position:relative;&quot;&gt;&lt;a href=&quot;#mots-de-la-fin&quot; aria-label=&quot;mots de la fin permalink&quot; class=&quot;anchor before&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; height=&quot;16&quot; version=&quot;1.1&quot; viewBox=&quot;0 0 16 16&quot; width=&quot;16&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; d=&quot;M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/a&gt;Mots de la fin&lt;/h2&gt;
&lt;p&gt;Merci de m’avoir suivi jusque là ! Je travaille dur sur &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;A Time Paradox&lt;/a&gt; pour que le rendu soit cool ! Passez voir le site !&lt;/p&gt;
&lt;p&gt;Vous souhaitez régir ? Vous avez fait des choses grace à cet article ? dites-le moi !&lt;br&gt;
Envoyez vos messages privés et mentions sur twitter &lt;a href=&quot;https://twitter.com/lythom&quot;&gt;@Lythom&lt;/a&gt;, et les messages à &lt;a href=&quot;mailto:samuel@a-game-studio.com&quot;&gt;samuel@a-game-studio.com&lt;/a&gt;. Je les retweeterai !&lt;/p&gt;
&lt;p&gt;Bon hacking !&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Time Paradox]]></title><description><![CDATA[Vous êtes coincé dans une boucle temporelle. Infiltrez-vous contre vous-même pour éviter le paradoxe ! Je dois me cacher des moi du passé…]]></description><link>https://a-game-studio.com/fr/projects/a-time-paradox/</link><guid isPermaLink="false">https://a-game-studio.com/fr/projects/a-time-paradox/</guid><pubDate>Mon, 27 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Vous êtes coincé dans une boucle temporelle. Infiltrez-vous contre vous-même pour éviter le paradoxe !&lt;/p&gt;
&lt;div style=&quot;text-align:center&quot;&gt;
    &lt;video autoplay=&quot;autoplay&quot; loop=&quot;loop&quot; width=&quot;320&quot; height=&quot;320&quot;&gt;
        &lt;source src=&quot;/10a350b31ff593eda1b2f6875ff7c13e/atimeparadox_loop.mp4&quot; type=&quot;video/mp4&quot; /&gt;
    &lt;/video&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Je dois me cacher des moi du passé. Si je suis vu…&lt;br&gt;
&lt;cite&gt;Un voyageur temporel&lt;/cite&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&quot;startButton&quot;&gt;
    &lt;a href=&quot;https://a-time-paradox.com/&quot;&gt;Voir le site&lt;/a&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Press Start Button]]></title><description><![CDATA[A Game Studio is opening the blog ! You will find news, technical articles about game programming, shaders, game design and any topic an…]]></description><link>https://a-game-studio.com/blog/press-start-button/</link><guid isPermaLink="false">https://a-game-studio.com/blog/press-start-button/</guid><pubDate>Sun, 26 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A Game Studio is opening the blog ! You will find news, technical articles about game programming, shaders, game design and any topic an indie game dev could find interesting.&lt;/p&gt;
&lt;p&gt;I can wait ! I hope you’ll like it.&lt;/p&gt;
&lt;p&gt;No more waiting, here is the first technical article. Let the fun begin !&lt;/p&gt;
&lt;div class=&quot;startButton&quot;&gt;
    &lt;a href=&quot;../hacking-through-shaders&quot;&gt;Start&lt;/a&gt;
&lt;/div&gt;</content:encoded></item><item><title><![CDATA[Appuyez sur Start]]></title><description><![CDATA[A Game Studio ouvre son blog ! Vous trouverez ici des actualités, des articles techniques sur la programmation, les shaders, le game design…]]></description><link>https://a-game-studio.com/fr/blog/press-start-button/</link><guid isPermaLink="false">https://a-game-studio.com/fr/blog/press-start-button/</guid><pubDate>Sun, 26 Aug 2018 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A Game Studio ouvre son blog ! Vous trouverez ici des actualités, des articles techniques sur la programmation, les shaders, le game design et sur tout sujet intéressant qu’un développeur de jeux indépendant peut aborder.&lt;/p&gt;
&lt;p&gt;J’ai hate ! J’espère que ça va vous plaire !&lt;/p&gt;
&lt;p&gt;Sans plus tarder, je vous emmène vers le premier article technique, que le fun commence !&lt;/p&gt;
&lt;div class=&quot;startButton&quot;&gt;
    &lt;a href=&quot;../hacking-through-shaders&quot;&gt;Start&lt;/a&gt;
&lt;/div&gt;</content:encoded></item></channel></rss>