{"id":88,"date":"2025-05-24T15:33:41","date_gmt":"2025-05-24T14:33:41","guid":{"rendered":"https:\/\/szczepan.gawkowski.com.pl\/?p=88"},"modified":"2025-07-12T14:53:31","modified_gmt":"2025-07-12T13:53:31","slug":"fun-with-unity-inspired-by-tomb-raider-iii","status":"publish","type":"post","link":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/2025\/05\/24\/fun-with-unity-inspired-by-tomb-raider-iii\/","title":{"rendered":"Fun with Unity inspired by Tomb Raider III"},"content":{"rendered":"\n<figure class=\"wp-block-pullquote has-accent-5-background-color has-background has-medium-font-size\"><blockquote><p>This is the work of God, that you believe in the one he sent<\/p><cite>John 6:29<\/cite><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"intro\">Intro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why not have some fun with Unity as a former TR fan and make something like a main menu? For instance, this is what the main menu of &#8220;Tomb Raider 3 Remastered&#8221; looks like.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f1b70&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f1b70\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"624\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-1024x624.png\" alt=\"\" class=\"wp-image-118\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-1024x624.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-300x183.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-768x468.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-1536x936.png 1536w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/Screenshot-2025-05-15-at-15.19.41-2048x1248.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">The main menu<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s do something similar!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Assets<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Since it is relatively easy to extract visual and audio elements from the remastered series, we will need &#8220;Tomb Raider I-III Remastered&#8221; (can be bought on <a href=\"https:\/\/www.gog.com\/en\/game\/tomb_raider_i_to_iii_remastered\">gog.com<\/a>) and <a href=\"https:\/\/www.blender.org\/\">Blender<\/a> with <a href=\"https:\/\/github.com\/PositionWizard\/TR123R-Blender-Addon\">TR123R-Blender-Addon<\/a>. Blender and the addon are required to extract the original meshes and textures.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two assets can be grabbed without any effort. The first one is the main menu sound (<code>GOG Games\\Tomb Raider I-III Remastered\\3\\TRACKS\\5.OGG<\/code>) and the background (<code>GOG Games\\Tomb Raider I-III Remastered\\3\\PIX\\HD\\TITLE_EU.DDS<\/code>).<br><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f2081&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f2081\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"833\" height=\"347\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/main-background-location.png\" alt=\"\" class=\"wp-image-105\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/main-background-location.png 833w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/main-background-location-300x125.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/main-background-location-768x320.png 768w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Although the background is in the DDS format, it can be quickly converted to any format you want using <a href=\"https:\/\/www.irfanview.com\/plugins.htm\">Irfan View and one of its plugins<\/a> (Formats). Please note that fonts are also stored as DDS files. For example, <code>GOG Games\\Tomb Raider I-III Remastered\\3\\TEX\\FONT0.DDS<\/code> contains English letters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now, let&#8217;s move to Blender and the addon. To install TR123R-Blender-Addon, download the zip file, open Blender, navigate to Edit -&gt; Preferences -&gt;Add-ons, click &#8220;Install from Disk&#8221; and select the zip file.  Then configure it as README.md states.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f24a0&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f24a0\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"677\" height=\"478\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image.png\" alt=\"\" class=\"wp-image-109\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image.png 677w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-300x212.png 300w\" sizes=\"auto, (max-width: 677px) 100vw, 677px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">The &#8220;Install from Disk&#8230;&#8221; option in Blender<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Here is a list of meshes used as menu items in the main menu scene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PASSPORT_OPTION<\/li>\n\n\n\n<li>SOUND_OPTION<\/li>\n\n\n\n<li>DETAIL_OPTION<\/li>\n\n\n\n<li>CONTROL_OPTION<\/li>\n\n\n\n<li>PHOTO_OPTION<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You can select each one and export it (Blender -&gt; File -&gt; Export -&gt; Wavefront)as an OBJ file, and then import it into Unity.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f2942&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f2942\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"471\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-1-1024x471.png\" alt=\"\" class=\"wp-image-110\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-1-1024x471.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-1-300x138.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-1-768x353.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-1.png 1355w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">PASSPORT_OPTION seen in Blender<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f2dda&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f2dda\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-4-1024x416.png\" alt=\"\" class=\"wp-image-116\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-4-1024x416.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-4-300x122.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-4-768x312.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-4.png 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Layout of DETAIL_OPTION<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Textures should be located in the &#8220;converted directory&#8221;.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f3297&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f3297\" class=\"wp-block-image size-full wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"858\" height=\"626\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-2.png\" alt=\"\" class=\"wp-image-113\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-2.png 858w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-2-300x219.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-2-768x560.png 768w\" sizes=\"auto, (max-width: 858px) 100vw, 858px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">The addon configuration. The converted directory is shown here.<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f3719&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f3719\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"485\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-3-1024x485.png\" alt=\"\" class=\"wp-image-114\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-3-1024x485.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-3-300x142.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-3-768x364.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-3.png 1143w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Our folder with textures. Passport textures are highlighted.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Development<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Although at this point we should be ready for development, first, a small disclaimer \ud83d\ude1b. The approach to implementing the game elements presented below is not ideal, and I chose it only to get to know Unity better and have some fun \ud83d\ude01\ud83d\udc68\u200d\ud83d\udcbb. Secondly, the description here will be more like a personal (and chaotic? \ud83d\ude43)notes rather than detailed instructions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The first scene<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Since every great production starts with splash screens, let&#8217;s not be different and do the same. Thus, let&#8217;s create a new scene (<code>SplashScene<\/code>) and add a black empty image as the background. We will show one text and another text with a picture sequentially. To do this, we will utilise <code>Canvas Group<\/code> and its <code>Alpha<\/code> property.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f3c11&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f3c11\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"334\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-1024x334.png\" alt=\"\" class=\"wp-image-120\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-1024x334.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-300x98.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-768x251.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-1536x501.png 1536w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-5-2048x668.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">SplashScene structure<\/figcaption><\/figure>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f18f401e&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f18f401e\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"334\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-1024x334.png\" alt=\"\" class=\"wp-image-121\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-1024x334.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-300x98.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-768x251.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-1536x501.png 1536w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-6-2048x668.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">SplashScene structure<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The last element is the so-called <code>SplachSceneManager<\/code>, an empty <code>GameObject<\/code> with a connected script that performs the fade-out effect.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>public class SplashSceneManager : MonoBehaviour\n{\n    public string sceneToLoad;\n    public List&lt;CanvasGroup> screensToShow;\n    public float delayBeforeFade = 0.5f;\n    public float fadeDuration = 0.5f;\n\n    void Start()\n    {\n        StartCoroutine(ShowScreens());\n    }\n\n    IEnumerator ShowScreens()\n    {\n        if (screensToShow == null || !screensToShow.Any())\n            throw new Exception($\"Empty {nameof(screensToShow)}\");\n\n        foreach (var screenToShow in screensToShow)\n        {\n            screenToShow.alpha = 1f;\n            yield return new WaitForSeconds(delayBeforeFade);\n\n            float logoOutElapsed = 0f;\n\n            while (logoOutElapsed &lt; fadeDuration)\n            {\n                logoOutElapsed += Time.deltaTime;\n                float alpha = Mathf.Lerp(1f, 0f, logoOutElapsed \/ fadeDuration);\n                screenToShow.alpha = alpha;\n                yield return null;\n            }\n        }\n\n        SceneManager.LoadScene(sceneToLoad);\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">SplashSceneManager<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> MonoBehaviour<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> sceneToLoad<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #D8DEE9FF\">CanvasGroup<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> screensToShow<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> delayBeforeFade <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0.5f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> fadeDuration <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0.5f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">StartCoroutine<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">ShowScreens<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    IEnumerator <\/span><span style=\"color: #88C0D0\">ShowScreens<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">screensToShow<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">||<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9\">screensToShow<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Any<\/span><span style=\"color: #ECEFF4\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">throw<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Exception<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">$&quot;<\/span><span style=\"color: #A3BE8C\">Empty <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #81A1C1\">nameof<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">screensToShow<\/span><span style=\"color: #ECEFF4\">)}&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">foreach<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> screenToShow <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">screensToShow<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">screenToShow<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">alpha<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">yield<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> WaitForSeconds<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">delayBeforeFade<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> logoOutElapsed <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">while<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">logoOutElapsed<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fadeDuration<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">logoOutElapsed<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Time<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">deltaTime<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> alpha <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Mathf<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Lerp<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">1f<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0f<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">logoOutElapsed<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">fadeDuration<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">screenToShow<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">alpha<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">alpha<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #81A1C1\">yield<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">SceneManager<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">LoadScene<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">sceneToLoad<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">The second scene<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Now it&#8217;s time for the second scene, which will be equally interesting. Namely, as we saw in the <a href=\"#intro\" data-type=\"internal\" data-id=\"#intro\">first image<\/a>, it will consist of a background and five objects arranged in a circle serving as menu elements. Navigation between these elements will be done using arrows (left and right). In addition, we will start music in the background and navigation with the arrows will trigger an additional sound.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s take care of our meshes. As we mentioned earlier, since we decided to use the OBJ format, after importing our objects into Unity, we need to &#8220;combine&#8221; them with textures. To do this, we need to create a material, use the appropriate texture as <code>Base Map<\/code> and experiment with the <code>Base Map<\/code> colour and <code>Metallic Map<\/code> and <code>Smoothness<\/code>. For example, this is my interpretation of the passport material \ud83d\ude00<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;6a689f1900269&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"6a689f1900269\" class=\"wp-block-image size-large wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"858\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on--pointerdown=\"actions.preloadImage\" data-wp-on--pointerenter=\"actions.preloadImageWithDelay\" data-wp-on--pointerleave=\"actions.cancelPreload\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7-1024x858.png\" alt=\"\" class=\"wp-image-129\" srcset=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7-1024x858.png 1024w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7-300x251.png 300w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7-768x643.png 768w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7-1536x1287.png 1536w, https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/image-7.png 1850w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\tdata-wp-bind--aria-label=\"state.thisImage.triggerButtonAriaLabel\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.thisImage.buttonRight\"\n\t\t\tdata-wp-style--top=\"state.thisImage.buttonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Passport option material<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Before placing menu items, we should<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>add a <code>Canvas<\/code> (<code>Render Mode<\/code>: <code>Screen Space - Camera<\/code>) with an image based on <code>TITLE_EU.DDS<\/code><\/li>\n\n\n\n<li>add an <code>Audio Source<\/code> looping <code>5.OGG<\/code><\/li>\n\n\n\n<li>add an empty <code>Game Object<\/code>, which will be used as our menu items manager; let&#8217;s name it <code>ObjectsManager<\/code>; all scripts manipulating our menu items will be attached to this object<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Initial menu items arrangement<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Can be done like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>public class CircleArranger : MonoBehaviour\n{\n    &#91;Tooltip(\"List of objects to arrange in a circle\")&#93;\n    public List&lt;GameObject> objectsToArrange;\n\n    &#91;Tooltip(\"Radius of the circle\")&#93;\n    public float radius = 5f;\n\n    void Start()\n    {\n        ArrangeInCircle();\n    }\n\n    private void ArrangeInCircle()\n    {\n        float angleStep = 360f \/ objectsToArrange.Count;\n        float adjustmentToAlignTheLastElement = 270f - (objectsToArrange.Count - 1) * angleStep;\n        for (int i = 0; i &lt; objectsToArrange.Count; i++)\n        {\n            float angle =  i * angleStep + adjustmentToAlignTheLastElement;\n            float rad = angle * Mathf.Deg2Rad;\n\n            Vector3 newPos = new Vector3(\n                Mathf.Cos(rad) * radius,\n                0.5f,\n                Mathf.Sin(rad) * radius\n            );\n\n            objectsToArrange&#91;i&#93;.transform.position = OptionsPositionAdjuster.Adjust(\n                newPos, radius);\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">CircleArranger<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> MonoBehaviour<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">Tooltip<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">List of objects to arrange in a circle<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #D8DEE9FF\">GameObject<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> objectsToArrange<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">Tooltip<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Radius of the circle<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> radius <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">5f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">ArrangeInCircle<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ArrangeInCircle<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> angleStep <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">360f<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">objectsToArrange<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Count<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> adjustmentToAlignTheLastElement <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">270f<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">objectsToArrange<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Count<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">angleStep<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">for<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> i <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">objectsToArrange<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Count<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #81A1C1\">++<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> angle <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">angleStep<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">adjustmentToAlignTheLastElement<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> rad <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">angle<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Mathf<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Deg2Rad<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            Vector3 newPos <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Vector3<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Mathf<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Cos<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">rad<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">radius<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #B48EAD\">0.5f<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Mathf<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Sin<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">rad<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">radius<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">objectsToArrange<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9\">i<\/span><span style=\"color: #ECEFF4\">&#93;.<\/span><span style=\"color: #D8DEE9\">transform<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">position<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OptionsPositionAdjuster<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Adjust<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">newPos<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">radius<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here, our objects are arranged in a circle with radius <code>radius<\/code> on the <code>XY<\/code> plane. Additionally, the <code>OptionsPositionAdjuster<\/code> slightly increases the <code>Y<\/code> coordinates so that objects located further from the camera, i.e. with a higher <code>Z<\/code> coordinate, are positioned slightly &#8220;higher&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Object rotation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Object rotation is more complicated, so we will only describe it briefly. First, note that the menu options rotate as you press the arrow keys.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>void Update()\n{\n  if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))\n  {\n    \/\/ left arrow key or right arrow key is pressed\n  }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Update<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Input<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetKey<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">KeyCode<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">LeftArrow<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">||<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Input<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetKey<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">KeyCode<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">RightArrow<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ left arrow key or right arrow key is pressed<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Second, after the player stops pressing the arrow key, the rotation becomes inert and moves to the &#8220;closest menu item&#8221; (function <code>AlignObjects()<\/code>).<br><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">C#<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>public Vector3 rotationCenter = Vector3.zero;\npublic float rotationSpeed = 90f;\npublic List&lt;GameObject> objectsToRotate;\n\nvoid Update()\n{\n    if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))\n    {\n        float direction = Input.GetKey(KeyCode.LeftArrow) ? -2.0f : 2.0f;\n        RotateAllObjects(direction);\n        _alignAutomatically = true;\n    }\n    else if (_alignAutomatically)\n    {\n        StartCoroutine(AlignObjects());\n    }\n}\n\nprivate void RotateAllObjects(float inputDirection)\n{\n    foreach (var obj in objectsToRotate)\n    {\n        obj.transform.RotateAround(rotationCenter,\n            Vector3.up,\n            inputDirection * rotationSpeed * Time.deltaTime);\n\n        obj.transform.position = OptionsPositionAdjuster.Adjust(obj.transform.position, Radius);\n    }\n}\n\nprivate IEnumerator AlignObjects()\n{\n  \/\/ AlignObjects() can use RotateAllObjects().\n  \/\/ After each \"slight\" rotation we can wait\n  \/\/\n  \/\/     yield return new WaitForSeconds(0.5f);\n  \/\/\n  \/\/ so that the\n  \/\/ movement is observable to the player and spread out in time.\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> Vector3 rotationCenter <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Vector3<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">zero<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> rotationSpeed <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">90f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #D8DEE9FF\">GameObject<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> objectsToRotate<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Update<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Input<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetKey<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">KeyCode<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">LeftArrow<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">||<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Input<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetKey<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">KeyCode<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">RightArrow<\/span><span style=\"color: #ECEFF4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> direction <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Input<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetKey<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">KeyCode<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">LeftArrow<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #B48EAD\">2.0f<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">2.0f<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">RotateAllObjects<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">direction<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">_alignAutomatically<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">_alignAutomatically<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">StartCoroutine<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">AlignObjects<\/span><span style=\"color: #ECEFF4\">())<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">RotateAllObjects<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">float<\/span><span style=\"color: #D8DEE9FF\"> inputDirection<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">foreach<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> obj <\/span><span style=\"color: #81A1C1\">in<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">objectsToRotate<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">obj<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">transform<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">RotateAround<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">rotationCenter<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">Vector3<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">up<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">inputDirection<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">rotationSpeed<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Time<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">deltaTime<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">obj<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">transform<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">position<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">OptionsPositionAdjuster<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Adjust<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">obj<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">transform<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">position<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Radius<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> IEnumerator <\/span><span style=\"color: #88C0D0\">AlignObjects<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ AlignObjects() can use RotateAllObjects().<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ After each &quot;slight&quot; rotation we can wait<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/     yield return new WaitForSeconds(0.5f);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ so that the<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ movement is observable to the player and spread out in time.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The above algorithm can be extended to play sound when menu items move (like in the original game).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final effect<\/h2>\n\n\n\n<div class=\"wp-block-media-text is-stacked-on-mobile\" style=\"grid-template-columns:85% auto\"><figure class=\"wp-block-media-text__media\"><video controls src=\"https:\/\/szczepan.gawkowski.com.pl\/wp-content\/uploads\/2025\/05\/final-effect.mp4\"><\/video><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Notice that the menu options have their labels displayed in the bottom center of the screen &#8211; just like in the original \ud83d\ude00 The font is different, but we&#8217;ll work on that later. The text display effect can be achieved by adding an additional <code>Canvas<\/code> with <code>Render Mode<\/code> equal to <code>Screen Space - Overlay<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Have fun!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the work of God, that you believe in the one he sent John 6:29 Intro Why not have some fun with Unity as a former TR fan and make something like a main menu? For instance, this is what the main menu of &#8220;Tomb Raider 3 Remastered&#8221; looks like. Let&#8217;s do something similar! [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[7,8],"class_list":["post-88","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-tomb-raider-iii","tag-unity"],"_links":{"self":[{"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/posts\/88","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/comments?post=88"}],"version-history":[{"count":31,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/posts\/88\/revisions"}],"predecessor-version":[{"id":190,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/posts\/88\/revisions\/190"}],"wp:attachment":[{"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/media?parent=88"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/categories?post=88"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/szczepan.gawkowski.com.pl\/index.php\/wp-json\/wp\/v2\/tags?post=88"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}