{"id":1457,"date":"2018-09-24T20:00:43","date_gmt":"2018-09-24T20:00:43","guid":{"rendered":"http:\/\/luxregina.com\/portfolio\/?p=1457"},"modified":"2018-09-24T20:00:43","modified_gmt":"2018-09-24T20:00:43","slug":"theta-legion-vr-creating-the-drone","status":"publish","type":"post","link":"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/","title":{"rendered":"[Theta Legion VR] Creating the drone"},"content":{"rendered":"<h2><span style=\"color: #00ccff;\">theta legion vr <\/span>| creating THE drone<\/h2>\n<p>I wanted to make the first enemy simple to animate, so that I could test the results without having too much throw-away in case things went bad. Also, from the player perspective, it&#8217;s better to keep the &#8220;fancy&#8221; enemies as a surprise (and progression validation) later in the game.<\/p>\n<p>I decided very early that I wanted my enemies to be animated sprites, rather than models. several reasons motivated that decision:<\/p>\n<ul>\n<li>Because the general aesthetic of the game is very much about pixel art, I wanted to make sure potential complex enemy models wouldn&#8217;t distract from the pixel art work: already on the environments, the pixel art can get lost in the perspective and the lighting, so I wanted my enemies to stay as &#8220;classic&#8221; as possible.<\/li>\n<li>Modeling and animating the enemies would lead to a serious increase of work, and time. And I&#8217;m not sure the trade-off was worth it in the first place. Since we would have to stay extremely low-poly, we would have enemies in the lines of the Quake enemies &#8211; and I happen to prefer by far the Doom enemy design compared to Quake. I&#8217;m much faster at drawing and animating than I am at modeling, texturing, rigging and animating, and I&#8217;m also much more comfortable with the classic approach.<\/li>\n<\/ul>\n<p><strong>MOODBOARDS<\/strong><\/p>\n<p><img data-attachment-id=\"1461\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood40\/\" data-orig-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?fit=516%2C1080\" data-orig-size=\"516,1080\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood40\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?fit=143%2C300\" data-large-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?fit=489%2C1024\" decoding=\"async\" loading=\"lazy\" class=\"alignleft wp-image-1461\" src=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?resize=400%2C837\" alt=\"\" width=\"400\" height=\"837\" srcset=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?w=516 516w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?resize=143%2C300 143w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood40.png?resize=489%2C1024 489w\" sizes=\"(max-width: 400px) 100vw, 400px\" data-recalc-dims=\"1\" \/>By now, the fact that I always create moodboards for everything I do shouldn&#8217;t surprise anyone! \ud83d\ude42<\/p>\n<p>For the drone, I was hellbent on a round shape: first, because it reminds me the awkward menace of the <a href=\"http:\/\/phantasm.com\/legacy\/index.php?option=com_content&amp;task=view&amp;id=30&amp;Itemid=49\">spheres<\/a> from the movie Phantasm &#8211; but also because round and cylinder-type shapes work the best with the billboard approach (for those that don&#8217;t know, a billboarded sprite is a <a href=\"http:\/\/nehe.gamedev.net\/article\/billboarding_how_to\/18011\/\">sprite that always face the camera<\/a>). The round shape can also be evocative of some sort of &#8220;evil eye&#8221; and fits the lore of a &#8220;guardian&#8221; mechanism that will attack everything on sight.<\/p>\n<p>As you can tell by looking at the images on the left, I&#8217;m far from being the only one with this idea: the round oculus\/beholder-like mecha-guardian is a staple of many sci-fi universes.<\/p>\n<p>Even though the sprite was meant to stay simple to animate, I wanted to have multiple action-states:<br \/>\n&#8211; Looking around<br \/>\n&#8211; Suspicious\/Hunting<br \/>\n&#8211; Firing<\/p>\n<p>This means I needed additional elements that would help animate the sphere, such as external mechanisms, and a shell that opens up to reveal machine guns, etc.<\/p>\n<p><strong>SPRITE WORK IN PHOTOSHOP<\/strong><\/p>\n<p><img data-attachment-id=\"1465\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood41b\/\" data-orig-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?fit=279%2C357\" data-orig-size=\"279,357\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood41b\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?fit=234%2C300\" data-large-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?fit=279%2C357\" decoding=\"async\" loading=\"lazy\" class=\"alignright size-full wp-image-1465\" src=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?resize=279%2C357\" alt=\"\" width=\"279\" height=\"357\" srcset=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?w=279 279w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood41b.png?resize=234%2C300 234w\" sizes=\"(max-width: 279px) 100vw, 279px\" data-recalc-dims=\"1\" \/>Because I knew I would move a lot of things around while animating, I decided to layer pretty much everything in Photoshop, including the sphere shading: that would allow me to animate the various shades and help convey that the sphere is slightly rotating when looking down\/left\/right.<\/p>\n<p>The animation is composed of 8 frames total, separated in 4 groups:<\/p>\n<ul>\n<li><strong>Idle\/looking around<\/strong>: with the drone looking straight, then down, left and right (4 frames).<\/li>\n<li><strong>Alarmed<\/strong>: with the drone luminescent spikes popping out of its shell (1 frame).<\/li>\n<li><strong>Opening fire mechanism<\/strong>: the lower trap of the drone opens up to reveal the cannon (2 frames)<\/li>\n<li><strong>Firing<\/strong>: the drone has a fire frame that is also combined with the last frame of the opening fire animation to give the illusion that the muzzle fire is flashing (1 frame).<\/li>\n<li><strong>Closing fire mechanism<\/strong>: for when the drone returns to the idle state, playing in reverse all the frames from the opening animation.<\/li>\n<\/ul>\n<p><img data-attachment-id=\"1466\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/enemydronedoublesize\/\" data-orig-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?fit=128%2C128\" data-orig-size=\"128,128\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"enemyDronedoubleSize\" data-image-description=\"\" data-medium-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?fit=128%2C128\" data-large-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?fit=128%2C128\" decoding=\"async\" loading=\"lazy\" class=\"aligncenter size-full wp-image-1466\" src=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?resize=128%2C128\" alt=\"\" width=\"128\" height=\"128\" srcset=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?w=128 128w, https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/enemyDronedoubleSize.gif?resize=50%2C50 50w\" sizes=\"(max-width: 128px) 100vw, 128px\" data-recalc-dims=\"1\" \/><\/p>\n<p>After animating everything and testing the animation in Photoshop, I exported all the sequence as one long spritesheet to integrate in Unity.<\/p>\n<p><strong>UNITY INTEGRATION<\/strong><\/p>\n<p><img data-attachment-id=\"1468\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood42\/\" data-orig-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?fit=412%2C375\" data-orig-size=\"412,375\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood42\" data-image-description=\"\" data-medium-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?fit=300%2C273\" data-large-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?fit=412%2C375\" decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-1468\" src=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?resize=412%2C375\" alt=\"\" width=\"412\" height=\"375\" srcset=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?w=412 412w, https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood42.png?resize=300%2C273 300w\" sizes=\"(max-width: 412px) 100vw, 412px\" data-recalc-dims=\"1\" \/>Importing the sprite in Unity is as easy as just dropping it in the right folder. Of course, the texture type is set as <strong>Sprite (2D and UI)<\/strong>, the <strong>Wrap Mode<\/strong> is set up to<strong> Clamp<\/strong>, and I deactivate the filtering (<strong>Filter mode<\/strong> to <strong>Point<\/strong>) and <strong>Compression<\/strong> set to <strong>None <\/strong>in order to not have any anti-aliasing attempt on the sprite and preserve the crisp aspect of the pixel art sprite.<\/p>\n<p>With <strong>Sprite Mode<\/strong> set to <strong>Multiple<\/strong>, I then go in the <strong>Sprite Editor<\/strong>, and slice my spritesheet (Grid by cell size) making sure it slices every 64 pixels.<\/p>\n<p>After validating the result, I now have a sprite ready to integrate. On my scene, I <strong>create<\/strong> a new <strong>2D object<\/strong>, as a <strong>Sprite<\/strong> and assign it the right image in the <strong>Sprite Renderer<\/strong> (it should do it by default).<\/p>\n<p>In the <strong>animation panel<\/strong>, I <strong>create<\/strong> a new animation (I always start with the idle animation as a rule of thumb) and drag and drop the right sprites on the timeline, testing the animation to get the timing\/spacing right. Not all the frames should be placed at equidistance if you want to preserve an organic feel to your animation. I also often play with the sample speed from one animation to another to keep that &#8220;natural&#8221; vibe and not have my animation come across as too mechanical.<\/p>\n<p><img data-attachment-id=\"1469\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood44\/\" data-orig-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?fit=1000%2C147\" data-orig-size=\"1000,147\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood44\" data-image-description=\"\" data-medium-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?fit=300%2C44\" data-large-file=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?fit=1000%2C147\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1469 aligncenter\" src=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?resize=1000%2C147\" alt=\"\" width=\"1000\" height=\"147\" srcset=\"https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?w=1000 1000w, https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?resize=300%2C44 300w, https:\/\/i2.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood44.png?resize=768%2C113 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" data-recalc-dims=\"1\" \/><\/p>\n<p>I will repeat the same operation for all my different states, until I have my <strong>Idle<\/strong>, <strong>Alert<\/strong>, <strong>Open Fire<\/strong>, <strong>Close Fire<\/strong> and <strong>Fire<\/strong> animations.<\/p>\n<p>One thing I like to do is separate what I call <strong>intrinsic animation<\/strong> and <strong>extrinsic animation<\/strong>: by intrinsic animation, I mean all animations that happen to the object itself, and by extrinsic, I mean animations that happen to the object in relation to its environment.<\/p>\n<p><img data-attachment-id=\"1470\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood45\/\" data-orig-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?fit=1000%2C300\" data-orig-size=\"1000,300\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood45\" data-image-description=\"\" data-medium-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?fit=300%2C90\" data-large-file=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?fit=1000%2C300\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1470 aligncenter\" src=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?resize=1000%2C300\" alt=\"\" width=\"1000\" height=\"300\" srcset=\"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?w=1000 1000w, https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?resize=300%2C90 300w, https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood45.png?resize=768%2C230 768w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" data-recalc-dims=\"1\" \/><\/p>\n<p>The reason for separating them is that one shouldn&#8217;t influence the other. In this case, I wanted the sprite to bob up and down, to simulate some sort of &#8220;hover&#8221; effect. This led me to <strong>nest my sprite<\/strong> into a <strong>drone<\/strong> object, and the whole into a <strong>drone game object<\/strong> (just to be clean). The <strong>droneSprite<\/strong> object features the <strong>spritesheet animation<\/strong>, while the <strong>drone<\/strong> object features the <strong>Transform up and down animation<\/strong>.<\/p>\n<p><img data-attachment-id=\"1472\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/mood46\/\" data-orig-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?fit=567%2C371\" data-orig-size=\"567,371\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"mood46\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?fit=300%2C196\" data-large-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?fit=567%2C371\" decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-1472\" src=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?resize=567%2C371\" alt=\"\" width=\"567\" height=\"371\" srcset=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?w=567 567w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/mood46.png?resize=300%2C196 300w\" sizes=\"(max-width: 567px) 100vw, 567px\" data-recalc-dims=\"1\" \/>The last part of the integration is to actually <strong>string all the animations together using the animator State Machine<\/strong>. This can be more or less complex depending on how you will handle, via code, the different triggers that control what state plays when. For now, though, I just wanted to be able to see my animation in-game to make sure everything looped correctly, so the state machine was pretty straight forward.<\/p>\n<p><strong>IN GAME VIDEO OF THE DRONE<\/strong><\/p>\n<p><span class=\"embed-youtube\" style=\"text-align:center; display: block;\"><iframe class='youtube-player' type='text\/html' width='1180' height='664' src='https:\/\/www.youtube.com\/embed\/xGDK4EKX2Bw?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'><\/iframe><\/span><\/p>\n<p><strong>SCREENSHOT<\/strong><\/p>\n<p><img data-attachment-id=\"1473\" data-permalink=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/dronescreen\/\" data-orig-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?fit=1896%2C883\" data-orig-size=\"1896,883\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"droneScreen\" data-image-description=\"\" data-medium-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?fit=300%2C140\" data-large-file=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?fit=1024%2C477\" decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-1473 aligncenter\" src=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?resize=1180%2C550\" alt=\"\" width=\"1180\" height=\"550\" srcset=\"https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?w=1896 1896w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?resize=300%2C140 300w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?resize=768%2C358 768w, https:\/\/i0.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/07\/droneScreen.png?resize=1024%2C477 1024w\" sizes=\"(max-width: 1180px) 100vw, 1180px\" data-recalc-dims=\"1\" \/><\/p>\n<p>&nbsp;<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1457\" class=\"share-facebook sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Facebook (Opens in new window)<\/span><\/a><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-1457\" class=\"share-linkedin sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on LinkedIn (Opens in new window)<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/\" target=\"_blank\" title=\"Click to print\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to print (Opens in new window)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>theta legion vr | creating THE drone I wanted to make the first enemy simple to animate, so that I could test the results without having too much throw-away in case things went bad. Also, from the player perspective, it&#8217;s better to keep the &#8220;fancy&#8221; enemies as a surprise (and progression validation) later in the [&hellip;]<\/p>\n<div class=\"sharedaddy sd-sharing-enabled\"><div class=\"robots-nocontent sd-block sd-social sd-social-icon sd-sharing\"><h3 class=\"sd-title\">Share this:<\/h3><div class=\"sd-content\"><ul><li class=\"share-facebook\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-facebook-1457\" class=\"share-facebook sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/?share=facebook\" target=\"_blank\" title=\"Click to share on Facebook\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on Facebook (Opens in new window)<\/span><\/a><\/li><li class=\"share-linkedin\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"sharing-linkedin-1457\" class=\"share-linkedin sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/?share=linkedin\" target=\"_blank\" title=\"Click to share on LinkedIn\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to share on LinkedIn (Opens in new window)<\/span><\/a><\/li><li class=\"share-print\"><a rel=\"nofollow noopener noreferrer\" data-shared=\"\" class=\"share-print sd-button share-icon no-text\" href=\"http:\/\/luxregina.com\/portfolio\/theta-legion-vr-creating-the-drone\/\" target=\"_blank\" title=\"Click to print\"><span><\/span><span class=\"sharing-screen-reader-text\">Click to print (Opens in new window)<\/span><\/a><\/li><li class=\"share-end\"><\/li><\/ul><\/div><\/div><\/div>","protected":false},"author":1,"featured_media":1531,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sharing_disabled":false,"switch_like_status":false,"spay_email":"","jetpack_publicize_message":""},"categories":[24,28,29],"tags":[],"jetpack_featured_media_url":"https:\/\/i1.wp.com\/luxregina.com\/portfolio\/wp-content\/uploads\/2018\/09\/breakdown4.png?fit=960%2C960","jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/p5xnSl-nv","jetpack-related-posts":[],"_links":{"self":[{"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/posts\/1457"}],"collection":[{"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/comments?post=1457"}],"version-history":[{"count":11,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/posts\/1457\/revisions"}],"predecessor-version":[{"id":1551,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/posts\/1457\/revisions\/1551"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/media\/1531"}],"wp:attachment":[{"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/media?parent=1457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/categories?post=1457"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/luxregina.com\/portfolio\/wp-json\/wp\/v2\/tags?post=1457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}