<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Seb</title>
    <description>The latest articles on Forem by Seb (@sebight).</description>
    <link>https://forem.com/sebight</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F971144%2Fc05cc77a-5bc8-488d-9089-cd55e468c01e.png</url>
      <title>Forem: Seb</title>
      <link>https://forem.com/sebight</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sebight"/>
    <language>en</language>
    <item>
      <title>4 months of being a firmware programmer</title>
      <dc:creator>Seb</dc:creator>
      <pubDate>Fri, 28 Apr 2023 16:05:00 +0000</pubDate>
      <link>https://forem.com/sebight/4-months-of-being-a-firmware-programmer-5gn2</link>
      <guid>https://forem.com/sebight/4-months-of-being-a-firmware-programmer-5gn2</guid>
      <description>&lt;p&gt;Back in January, I transitioned from working in a high-level programming job (making apps in Unity) to a slightly more low-level job, which includes engineering ESP microcontroller firmware. Some may call it a leap of faith, because the difference is like night and day, but I felt like I needed a change and had a desire to improve my knowledge in different fields of computer engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  First impressions
&lt;/h2&gt;

&lt;p&gt;Coming from C#, I had little to no knowledge of C++. But being fairly proficient in C#, I felt confident about the idea of learning a whole new programming language. So it started, I found my old and dusted ESP32, which was lying around my table, and flashed my very first C++ Arduino firmware onto it. I knew some stuff about microcontrollers, as I had experimented with them a little about 4 years earlier. &lt;/p&gt;

&lt;p&gt;I created a few example programs, such as making the onboard LED blink every 2 seconds, or initializing a BLE (Bluetooth Low Energy) advertisement and being able to connect to it from my phone. All this was pretty exciting stuff. I felt a totally different feeling while working on this very tiny computer, contrary to developing software that runs on normal personal computers.&lt;/p&gt;

&lt;p&gt;It felt impressive to me to be able to hold something so small and see my code running on that tiny engineering masterclass. After my "being in absolute awe" phase, it was about time to get back into reality and discover even more interesting stuff about these microcontrollers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actual work
&lt;/h2&gt;

&lt;p&gt;I had been interested in microcontrollers for some time prior to this work opportunity. Albeit, the job itself was really the reason why I got interested in this field of computer engineering once again.&lt;/p&gt;

&lt;p&gt;I cannot disclose much about the job itself, except it being a firmware programming job. When I joined the company, the product had been in development for over 3 years, which meant I had a lot of catching up to do. I would lie if I said that I was not shocked by the sheer amount of code, that had already been produced by my colleagues.&lt;/p&gt;

&lt;p&gt;Fast-forward a few weeks, my onboarding has been going on pretty well. I was getting familiar with more code every day and I was ready to get into programming new features and squashing bugs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summarized feelings after 4 months
&lt;/h2&gt;

&lt;p&gt;All I can say is that I thoroughly like the job and I enjoy working in this field of IT. &lt;/p&gt;

&lt;p&gt;The essential difference (except that it is a completely different programming language) is the environment that it is set in. Back in my old Unity and C# days, I did not really care about the code optimization or speed, as it was always running on a machine that consisted of about 16 gigabytes of RAM, which was more than enough to execute my code. &lt;/p&gt;

&lt;p&gt;On the other hand, when working with an ESP, you are given about 1 megabyte of RAM. That is about &lt;code&gt;16 384 times&lt;/code&gt; less. Therefore, you attempt to write the most lightweight code possible, and I enjoy thinking outside of the box to achieve this ultimate goal. I also feel that this harsh environment pushes me to my limits every day, and evolves me as a programmer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outlook on the future
&lt;/h2&gt;

&lt;p&gt;I am looking forward to discovering more interesting pieces of information about the microcontroller world. At the same time, I want to push myself out of my comfort zone to gain more valuable experience as a programmer and a hardware engineer.&lt;/p&gt;

&lt;p&gt;Now, I shall focus on developing my skills again. This journey has been very fun so far, and I cannot wait to see what the future brings. See you soon! &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Creating an escape room game in Unity</title>
      <dc:creator>Seb</dc:creator>
      <pubDate>Wed, 07 Dec 2022 20:34:32 +0000</pubDate>
      <link>https://forem.com/sebight/creating-an-escape-room-game-in-unity-1i9f</link>
      <guid>https://forem.com/sebight/creating-an-escape-room-game-in-unity-1i9f</guid>
      <description>&lt;h2&gt;
  
  
  What and why?
&lt;/h2&gt;

&lt;p&gt;I've been thinking for a while, which game prototype I could work on in my free time. Working on various prototypes and things, which differ from my normal job can be a fun way to test myself and expand my knowledge in slightly other and new things. I've come up with few ideas (which were expanded by ChatGPT, who I might cover in future posts), but ultimately I've settled with an escape room game. &lt;em&gt;First person&lt;/em&gt;, &lt;em&gt;basic movement&lt;/em&gt; and a &lt;em&gt;possibility&lt;/em&gt; to interact with &lt;em&gt;virtually anything&lt;/em&gt; were some of the key aspects I had in mind when starting this project.&lt;/p&gt;

&lt;p&gt;So I've started working on some core components of the game. While working on these, I've figured that it might not be a bad idea to write down my progress (hopefully every or every other week). First point why this might be a good idea is some sort of restrospective. I can open any of these posts at any time and analyze the code, tell what could've been done better and so on. Other one is to keep consistent progress and try to keep the project development going. &lt;/p&gt;

&lt;p&gt;With all that being said, I think it's about time to look into what I've done this week and try to explain the written systems as best I can.&lt;/p&gt;

&lt;h2&gt;
  
  
  The game
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Character
&lt;/h3&gt;

&lt;p&gt;Most of the stuff I've done is the simple "starting ground" work. I've written a pretty simple Rigidbody Character controller script, which takes care of first-person camera and all the common operations, such as clamping the player's look rotation, so they don't go upside down and similar things.&lt;/p&gt;

&lt;p&gt;I think the Character controller is not very interesting, as it is really basic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Items
&lt;/h3&gt;

&lt;p&gt;One of the key components is an item system. An easily configurable code, which can be put on as component on any GameObject and should be ready to use. The very important thing when it comes to items is interaction with them. &lt;/p&gt;

&lt;p&gt;Say we have a key. Key is lying on the ground and I want to pick it up. In some games, you walk over the key and it picks itself up automatically. As long as it's a pretty good solution, I've wanted to come up with something more robust. &lt;/p&gt;

&lt;h4&gt;
  
  
  IInteractableController
&lt;/h4&gt;

&lt;p&gt;I've come up with a concept of &lt;code&gt;IInteractableController&lt;/code&gt;. The code is pretty simple.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IInteractableController&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnInteract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IInteractable&lt;/span&gt; &lt;span class="n"&gt;interactable&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;RegisterParentDependency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IInteractable&lt;/span&gt; &lt;span class="n"&gt;registrable&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Its sole purpose is to call &lt;code&gt;OnInteract&lt;/code&gt; function on its parent &lt;code&gt;IInteractable&lt;/code&gt; dependency.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ProximityPrompt.cs&lt;/code&gt;, for example, implements IInteractableController. It handles some logic of a player being near the GameObject (the component is on) and in some way (be it click or hold of a button) triggering an OnInteract event. When this event is fired, &lt;code&gt;IInteractableController&lt;/code&gt; lets its parent IInteractable know that the Interactable has been interacted with.&lt;/p&gt;

&lt;p&gt;Then I have class &lt;code&gt;Item&lt;/code&gt;, which wraps some logic above an Item concept, such as Name and if the item is Stackable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Item&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsStackable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;virtual&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;OnInteraction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Item&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Player&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Inventory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;AddItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nf"&gt;InventoryItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;IsStackable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gameObject&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
        &lt;span class="n"&gt;gameObject&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;SetActive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Yes, I cam using singletons and it is something I might change in the future.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As can be seen, &lt;code&gt;Item&lt;/code&gt; (which is a base class for any other inheritied items) contains some metadata as well as a &lt;code&gt;OnInteraction&lt;/code&gt; which always adds the item into an inventory. This is something I might want to play with, in case I have "Items" such as Door, Gate, or similar. In that situation, though, it will be a better idea to simply not inherit the &lt;code&gt;Door.cs&lt;/code&gt; class from Item, but still make it implement &lt;code&gt;IInteractable&lt;/code&gt;, so I get the &lt;code&gt;HandleInteraction()&lt;/code&gt; function.&lt;/p&gt;

&lt;p&gt;Ultimately, we come to the &lt;code&gt;Key&lt;/code&gt; class definition, which currently looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Key&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;IInteractable&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;IInteractableController&lt;/span&gt; &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Controller&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;GetComponent&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;IInteractableController&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;();&lt;/span&gt;
        &lt;span class="n"&gt;Controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;RegisterParentDependency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;HandleInteraction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;OnInteraction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It has a reference for IInteractableController (which is a component on the GameObject) and in the Start function it registers itself as the parent dependency (later used for the calling the Interact event).&lt;/p&gt;

&lt;p&gt;This is pretty much the whole logic of the Items in the game, as of now. Some stuff I will surely want to add in the future is some concept of &lt;code&gt;Use()&lt;/code&gt; function in the base &lt;code&gt;Item&lt;/code&gt; class, which will handle a scenario when user has an item equipped and presses the Use [E] key. That will be used for unlocking door, chests and closets.&lt;/p&gt;

&lt;h4&gt;
  
  
  Player
&lt;/h4&gt;

&lt;p&gt;One last small thing is the Player structure. I wanted to keep stuff simple (that's why it's a singleton again).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Player&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;MonoBehaviour&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="n"&gt;Player&lt;/span&gt; &lt;span class="n"&gt;Instance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Character&lt;/span&gt; &lt;span class="n"&gt;Character&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="n"&gt;Inventory&lt;/span&gt; &lt;span class="n"&gt;Inventory&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;IsControllable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;Instance&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ChangeControl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;isControllable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;IsControllable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;isControllable&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;Update&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;IsControllable&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;Character&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ControlLogic&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This takes care of seperating the logic from the character movement and other events which will be happening. This so far looks like a viable solution, but time will decide if it's good.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;I think that's all for now. I can mention work I've done on the UI part of the game, but there is not that much code, because there is not much logic just yet.&lt;/p&gt;

&lt;p&gt;That's it for now. I would say it's a pretty good start of the project and the game is slowly becoming a (little playable) thing.&lt;/p&gt;

&lt;p&gt;I will see you in a bit, to talk about more code I've written.&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>programming</category>
      <category>csharp</category>
    </item>
    <item>
      <title>The importance of using moderns tools with Unity</title>
      <dc:creator>Seb</dc:creator>
      <pubDate>Fri, 18 Nov 2022 21:05:00 +0000</pubDate>
      <link>https://forem.com/sebight/the-importance-of-using-moderns-tools-with-unity-46e6</link>
      <guid>https://forem.com/sebight/the-importance-of-using-moderns-tools-with-unity-46e6</guid>
      <description>&lt;p&gt;Programmers work with various tools every single day. Starting from the very low-level parts of software, such as operating system and finishing somewhere little higher around modern IDEs and other time-saving programs.&lt;/p&gt;

&lt;p&gt;There's no discussion that every software engineer uses text editor of some sort. While some use old school editors such as Vim or Notepad++, others tend to lean towards slightly newer software, which generally offers more modern and handy tooling.&lt;/p&gt;

&lt;p&gt;When it comes to using IDEs (or text editors) with Unity, there is definitely a vast amount of software to choose from. The most popular IDE to use with Unity is probably Visual Studio 2019, which comes preinstalled with the first Unity version you download. &lt;/p&gt;

&lt;p&gt;Other very popular IDE to use with Unity must be JetBrains Rider. An extremely robust piece of software, which helps you speed up your development process. I've been personally using Rider with Unity close to a year now and it's been such a time-saver.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oWsd5YAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1523800503107-5bc3ba2a6f81%3Fixlib%3Drb-4.0.3%26ixid%3DMnwxMjA3fDB8MHxzZWFyY2h8MTR8fHByb2dyYW1taW5nfGVufDB8fDB8fA%253D%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D900%26q%3D60" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oWsd5YAP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1523800503107-5bc3ba2a6f81%3Fixlib%3Drb-4.0.3%26ixid%3DMnwxMjA3fDB8MHxzZWFyY2h8MTR8fHByb2dyYW1taW5nfGVufDB8fDB8fA%253D%253D%26auto%3Dformat%26fit%3Dcrop%26w%3D900%26q%3D60" alt="PC Monitor" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The wake up call, which I've got from using Rider extensively for almost every day of the last year, was the importance of using moderns tools. To be fair, while working in VS or VSCode, I've only used a little amount of tools provided by the software. This came to haunt me with countless hours of debugging foolish mistakes, which were simply caused by my ignorance of the tools I've been provided with.&lt;/p&gt;

&lt;p&gt;I've started using few debugging tools, but primarily smaller features, such as the godlike &lt;strong&gt;Refactor This&lt;/strong&gt; command, which saves so much effort and time. With this command, you can, for instance, rename any class or function (and much more). The great thing about this is, that it renames all dependencies (or specifically usages), so you don't need to go through all of your code line by line and find it yourself.&lt;/p&gt;

&lt;p&gt;This is a really tiny portion of features a modern IDE can offer. The important thing is to avoid the crucial mistake I've done, which was not using these to a full extent and thus making things harder for myself. Use every bit of tech you can and make things easier for yourself. It will definitely make the process of development a tad more enjoyable.&lt;/p&gt;

</description>
      <category>unity3d</category>
      <category>gamedev</category>
      <category>csharp</category>
    </item>
  </channel>
</rss>
