<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Uncategorized- KAPPS</title>
	<atom:link href="https://kapps.io/category/uncategorized/feed" rel="self" type="application/rss+xml" />
	<link>https://kapps.io/category/uncategorized</link>
	<description>Outsource GameDev Team focused on Games, VR, 3D, SDK, and Unity packages</description>
	<lastBuildDate>Thu, 07 Mar 2024 12:21:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://kapps.io/wp-content/uploads/2024/05/kapps-website-icon-150x150.png</url>
	<title>Uncategorized- KAPPS</title>
	<link>https://kapps.io/category/uncategorized</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>An amusing story of how we almost killed our product</title>
		<link>https://kapps.io/an-amusing-story-of-how-we-almost-killed-our-product</link>
					<comments>https://kapps.io/an-amusing-story-of-how-we-almost-killed-our-product#respond</comments>
		
		<dc:creator><![CDATA[webdev01]]></dc:creator>
		<pubDate>Wed, 13 Apr 2022 13:12:49 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://stansassets.com/?p=1161</guid>

					<description><![CDATA[<p>Unity is one of the most popular game engines in the world. Now our team creates plugins that are used by hundreds of thousands of Unity developers. But when we’ve just started, we made a huge mistake, which, fortunately, led us to a great experience. So let’s talk about the situation that almost crashed our [&#8230;]</p>
<p>The post <a href="https://kapps.io/an-amusing-story-of-how-we-almost-killed-our-product">An amusing story of how we almost killed our product</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Unity is one of the most popular game engines in the world. Now our team creates plugins that are used by hundreds of thousands of Unity developers. But when we’ve just started, we made a huge mistake, which, fortunately, led us to a great experience. So let’s talk about the situation that almost crashed our careers.</p>



<p class="wp-block-paragraph"><strong>Successful start</strong></p>



<p class="wp-block-paragraph">There are two ways to create games or applications in Unity. You can write all the code yourself, which is very long and difficult. Or you can use ready-made plugins. These are packages with a set of development, design and other tools that you can just download and straight forward use in the game. Those plugins help to use all the parts of the project as playing with a constructor.</p>



<p class="wp-block-paragraph">To simplify the development process, Unity created its own Asset Store (as an analogy of the App Store for iPhone), where developers posted and sold their plugins so others would not waste time and use ready-made solutions for their tasks.</p>



<p class="wp-block-paragraph">At the same time, my colleagues from the KAPPS team and me started developing such plugins for Unity. We are developers. This means that no one but us better understands how to create products that will make developer’s life easier.</p>



<p class="wp-block-paragraph">Our plugins really made us well-known around the community. Soon, we became one of the top 5 teams by downloading at the global Asset Store. The most popular of our plugins are Ultimate Mobile Pro, iOS Native Pro, Android Native Pro.</p>



<p class="wp-block-paragraph">Therefore, the support of the Asset Store recommended us for Unity users itself. Because of this, such famous companies as Moon Studios and OneSignal asked us to help with their development. And we successfully work with them to this day.</p>



<p class="wp-block-paragraph"><em>But just as in every good story, right when we became popular among Unity users, we made one of the biggest failures in our career.</em></p>



<p class="wp-block-paragraph"><strong>Loss of control and money</strong></p>



<p class="wp-block-paragraph">We started working on plugins as soon as they appeared in Unity. Back than we didn’t have that much of a experience, so we thought we were doing everything right. But at some point, the process started to snowball. And here&#8217;s why.</p>



<p class="wp-block-paragraph">The creation of the plugins looks like this:</p>



<ul class="wp-block-list">
<li>you create plugins and upload them to the store;</li>
<li>other developers download and use them;</li>
<li>if something does not work, they write reviews or requests to fix it.</li>
</ul>



<p class="wp-block-paragraph">Everything here is just like in any other service: you get feedback and start doing everything to improve the situation. So we have been releasing new plugins and at the same time have been fixing everything that users asked us about.</p>



<p class="wp-block-paragraph">Meanwhile, the competition and the demands of our audience were growing. We were shown a problem – we solved it, we were given a request – we fixed it. But again due to lack of experience, it had turned out that our plugin architecture was really bad. We worked fast and tried to quickly deliver fixed products, but forgot about the quality of the original code.</p>



<p class="wp-block-paragraph">At that time, we launched twelve plugins for general use, which we were &#8220;renewing&#8221; all the time. It took a lot of effort, and, of course, money. And we realized two things:</p>



<ul class="wp-block-list">
<li>Fixing all the problems people complain about is unrealistic. It&#8217;s easier to just rewrite everything.</li>
<li>The financial costs of supporting and developing the project went beyond what we have earned at the Asset Store.</li>
</ul>



<p class="wp-block-paragraph">Basically we had earned $ 5-7k a month from plugins sales. And exactly the same amount was paid to developers to fix bugs. This is an perfect example how bad code and bad architecture &#8220;killed&#8221; a really good product – our plugins. We did not cover the cost of product development. And it could not go on like this.</p>



<p class="wp-block-paragraph"><strong>Difficult decision</strong></p>



<p class="wp-block-paragraph">So we made a very difficult decision. We stopped the current developing processes. We took a break, removed all our old plugins from the Asset Store and started writing new ones. It all took about a year. Every day we were writing new products from scratch. But this time it was different: it was a clean code and good architecture.</p>



<p class="wp-block-paragraph"><strong>Product quality</strong></p>



<p class="wp-block-paragraph">The effect was amazing. After we rewrote the products, it became 10 times cheaper to maintain them! Whereas in the beginning our developers spent days fixing problems, now it takes several hours a week.</p>



<p class="wp-block-paragraph">Previously, plugin support cost us $ 7-10k, but now it costs only $ 800. After this incident, we have learned forever that the correct architecture, clean and well-thought-out code will help us to develop the product way easier, cheaper and better. This principle applies to any job, project, or career.</p>



<p class="wp-block-paragraph">Always put quality first. Then you do not have to redo the work and spend money on fixing errors that could have been avoided and therefore there would be no need to risk your reputation.</p>
<p>The post <a href="https://kapps.io/an-amusing-story-of-how-we-almost-killed-our-product">An amusing story of how we almost killed our product</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kapps.io/an-amusing-story-of-how-we-almost-killed-our-product/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>We stand with Ukraine</title>
		<link>https://kapps.io/we-stand-with-ukraine</link>
					<comments>https://kapps.io/we-stand-with-ukraine#respond</comments>
		
		<dc:creator><![CDATA[webdev01]]></dc:creator>
		<pubDate>Tue, 15 Mar 2022 16:10:32 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://stansassets.com/?p=1363</guid>

					<description><![CDATA[<p>The war has found each of us in different positions and situations. But we’re all united by our willingness to win and help those in need. Some of us just don’t know how to do it in the best way, so we’ve created an easy guide on different ways how to support Ukrainians right now. [&#8230;]</p>
<p>The post <a href="https://kapps.io/we-stand-with-ukraine">We stand with Ukraine</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">The war has found each of us in different positions and situations. But we’re all united by our willingness to win and help those in need. Some of us just don’t know how to do it in the best way, so we’ve created an easy guide on different ways how to support Ukrainians right now. Choose the best one for you, and just click on the links below to do so. Any little help can already make a change. Glory to Ukraine! Слава Україні!</p>



<ol class="wp-block-list"><li>Through the Privat Bank, leave your donations via the bank app for <a href="https://blago.privatbank.ua/" target="_blank" rel="noreferrer noopener"><strong>Dobro</strong></a> fund or the Ukrainian Armed Force.</li><li>Through the <a href="https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi" target="_blank" rel="noreferrer noopener"><strong>National Bank of Ukraine</strong></a>.</li><li>Join the <strong><a href="https://helplist.io/" target="_blank" rel="noreferrer noopener">HelpList</a></strong> website for requests for help of various kinds.</li><li>Help social assistance in Kremenchuk (a woman simply buys baby food and diapers and delivers them, and she requires money for the goods and delivery). Card number to transfer money <strong>4441 1144 4913 6637</strong>.</li><li>Purchase of pharmacy and distribution to Kharkov hospitals. Card number to transfer money <strong>5457 0822 2693 6354</strong> (Kirienko Andriy).</li><li>Who&#8217;s in Montenegro &#8211; visiting local military offices in Podgorica and buy everything necessary for military needs (from clothes to thermal imagers) or help refugees. DM us, if you&#8217;re interested to help here.</li><li>Help <strong><a href="https://t.me/CarFinder_UA" target="_blank" rel="noreferrer noopener">Carfinder</a></strong>, the guys are engaged in the selection of cars, we know them personally. They collect money for cars and the needs of the army, they also buy walkie-talkies, armor, and thermal imagers. </li><li>Bot for <strong><a href="https://t.me/ukraineborders_bot" target="_blank" rel="noreferrer noopener">Ukrainian Borders</a></strong>.</li></ol>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ALSO, please send us contacts of local volunteers you know personally. We&#8217;ll be updating our article with new info on helping every day! Because in addition to the army, millions of families in Ukraine need housing, food, and money.</p>
<p>The post <a href="https://kapps.io/we-stand-with-ukraine">We stand with Ukraine</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kapps.io/we-stand-with-ukraine/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Improving a Unity project: what is ECS and is it worth using it in development</title>
		<link>https://kapps.io/unity-ecs</link>
					<comments>https://kapps.io/unity-ecs#respond</comments>
		
		<dc:creator><![CDATA[webdev01]]></dc:creator>
		<pubDate>Thu, 03 Feb 2022 10:07:35 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://stansassets.com/?p=1352</guid>

					<description><![CDATA[<p>Today, there is plenty amount of information about how well Unity ECS performs compared to MonoBehaviour. But then a logical question appears: if it shows up so well, why any project doesn’t have ECS inside? Let’s talk about this in the article. Well, we will start from the beginning. ​​ECS is one of the Unity [&#8230;]</p>
<p>The post <a href="https://kapps.io/unity-ecs">Improving a Unity project: what is ECS and is it worth using it in development</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>Today, there is plenty amount of information about how well Unity ECS performs compared to MonoBehaviour. But then a logical question appears: if it shows up so well, why any project doesn’t have ECS inside? Let’s talk about this in the article.</em></p>



<p class="wp-block-paragraph">Well, we will start from the beginning. ​​ECS is one of the Unity DOTS stack modules that was introduced back in 2017. DOTS includes several technologies, with the core ones as Job System, ECS, Burst Compiler, as well as other packages: Unity Physics, Unity Netcode, DSPGraph, DOTS Runtime, Unity Animation.</p>



<p class="wp-block-paragraph">The heart of the stack is the Entity Component System, which includes:&nbsp;</p>



<ul class="wp-block-list"><li>Entity &#8211; entities that live in the project;</li><li>Component &#8211; data components that give entities various features;</li><li>System &#8211; pure systems that work with entities and data that are inside their components.</li></ul>



<p class="wp-block-paragraph">During our webinar, we showed a demo in which ECS DOTS, compared to MonoBehaviour, demonstrates incredible performance. We got this speed of work due to the fact that each of our Entity (data container), which we can very easily find, was processed in one place within our system. Solving the same problem with MonoBehaviour, we would do this operation in Update and in each MonoBehaviour separately.</p>



<p class="wp-block-paragraph">It is very important to note that the DOTS stack allows us to work with the Job System and Burst Compiler without a data-oriented development approach. Accordingly, the Job System opens the door to the world of multi-threaded work with the Unity API. Although Burst Compiler imposes certain restrictions when writing code, as a reward from LLVM we get highly optimized code adapted to the current platform. Therefore, we can conclude that ESC is not the only way to optimization and performance increase when using DOTS.</p>



<p class="wp-block-paragraph"><strong>Let&#8217;s analyze when ECS is really good and useful?</strong></p>



<ul class="wp-block-list"><li>When a project has a <em>huge number</em> of entities with the same archetype.</li></ul>



<ul class="wp-block-list"><li>ECS gives us <em>flexibility in logic</em>. It forces us to think and build the project accordingly DoD. It&#8217;s important to note that often when developers see methods inside components &#8211; they mark them as a mistake. Fortunately, this is not always the case, and let&#8217;s see why. A component can have logic within it that only handles the current component&#8217;s data. For example: inside the Vector3 structure, we can find many convenient properties such as Magnitude, Normalized or the Set method. All of them are created with a single goal &#8211; to help the developer.</li></ul>



<ul class="wp-block-list"><li><em>Photon Quantum</em> (deterministic high-performance ECS environment). What is the main difference between PQ and the usual Photon server that we are used to interacting with in the Unity world? It consists in the fact that in the heart of Photon Quantum everything initially lives in the entities form. You will have to work with unmanaged code in C# and in this way you will be able to migrate to ECS in Unity almost seamlessly. In fact, the application on Photon Quantum works like a large simulation, and Unity is used only as the view-layer, which means that your game can live and work in headless mode. Photon Quantum has its own pathfinding, its own physics engine, and many others. Also, Unity&#8217;s physics simulation system is bad because it&#8217;s non-deterministic. This means that with the same input data, I will not get the same results of a physical simulation. In other words, we cannot rely on such a system if physics is an important part of the gameplay in our game. Therefore, Photon Quantum has its own physical deterministic framework (same input = same results on different clients).</li></ul>



<p class="wp-block-paragraph"><strong>And when is ECS not that good?</strong></p>



<ul class="wp-block-list"><li><em>When you need to be prompt</em>. From a business and development point of view, there will be more time spent on developing an application that you create when using ECS. Because you will need to come up with your system, entities, components better and longer. The amount of the actual code that you will need to write for ECS will be literally bigger compared to MonoBehaviour. Therefore, your overall development time will increase. But it is important to remember that many frameworks suffer from this (they oblige us to write boilerplate code), but at the same time, having worked more at the beginning, we get more advantages later.</li></ul>



<ul class="wp-block-list"><li><em>When it comes to UI and animation</em>. Very often in the ECS demo, we see some cool stuff. But the complete project is not just one gameplay. And the important part of the result that we want to see is the animated UI. And at this moment everything becomes difficult, because if we go to pure ECS mode, for example, we have Project Tiny, then in general we have no other Rendere and we cannot render in any way, except through ECS components. This means that we will have to build the UI in the same data-oriented stack. Doing this is not very pleasant, and in principle, ECS is not very well suited for solving these problems, not to mention the complete absence of any frameworks, developments, and anything else in this direction. That’s why, it will be very difficult for you to build a UI, not to mention animation and other features that you definitely want to fill your project with.</li></ul>



<ul class="wp-block-list"><li><em>When there is the readability of the code issues</em>. This is a common programming problem. The larger amount of code you have, the more difficult it is to read and the more potential bugs it has. That is, imagine if I lived in the world of MonoBehaviours, then I would have only one class, where I have certain serialized fields that I use as data, and an update loop in which my logic spins, which processes each frame. If I were doing the same task in the ECS world, then I would have at least one more component class. And there must be some other bootstrapper that will create all my ECS entities so that it all lives in the ECS world.</li><li><em>When you need to connect the MonoBehaviour</em> (where we need to render something) <em>and the ECS worlds</em> (where there is only data and logic). Here everyone faces this “how to make them both friends” problem. You will write various data bindings, when in fact our Views will follow some entities, the positions of which we calculate in Job Systems. After all, many systems should interact within your project, and if they are from different worlds, then the implementation of their interaction will always be a very non-trivial task. In Unity, it is important to remember that people work with scenes and content. And ECS is not yet very friendly in this regard. Imagine that we do not see anything on the screen by rendering until world entities are created in the ECS domain. Artists and game designers cannot work like this, they need &#8220;live&#8221; scenes. If we recall our Unity inspector, then in ECS it will not allow us to edit values. This is what closes the doors of opportunity for artists and designers.</li></ul>



<p class="wp-block-paragraph"><strong>How and when is it best to use ECS?</strong></p>



<p class="wp-block-paragraph">ECS in Unity is most often associated with optimization. Because when the are some problems with a huge number of Monobehaviours appear, a developer can make a decision that they switch to a data-oriented stack and start rewriting the entire project. Of course, in many situations, ECS will give you a significant result, but first, we’d advise to ask yourself a few questions:</p>



<ul class="wp-block-list"><li><em>Are you ready to rewrite most of your project?</em> After all, everything will not be limited by just one system, and it will pull others along like a snowball.</li></ul>



<ul class="wp-block-list"><li><em>Are you sure you have considered other optimization options</em> and ECS is the only way? We faced a lot of situations when developers gave up due to performance problems. But often those tasks were solved with a couple of detailed and combat profile sessions, implementing a few new ideas. The developer, if we’re thinking from C# point of view, has so many tools: optimization of the mathematics, of the algorithms themselves, basic optimization approaches in Unity, and, finally, the Job System and Burst Compiler (without ECS yet).</li></ul>



<p class="wp-block-paragraph">&#8211; Another very important factor in deciding whether to use ECS <em>is the stage of the project</em>. If the project is in the early stages of development and it is possible to put in extra time to build the same task using a data-driven approach, then we’ll be more okay to do it. After all, the number of systems that will need to be changed is less. But if the project is close to completion and is already in production, it is very difficult to suspend all development and start rewriting all the code for N months.</p>



<p class="wp-block-paragraph">Also, we have deadlines for our projects, and pushing any of them back can cause a potential loss of position on the market. Sometimes it’s better to focus on current business conditions and opportunities, not just the technical aspect.</p>



<p class="wp-block-paragraph"><em>Therefore, all of the info we’ve shared today can be briefly summarized in one phrase: ECS has to be used not for the sake of the ECS development concept, but for the sake of performance when the application really needs it.</em></p>



<p class="wp-block-paragraph">And do not forget that using any new technology or framework in a project is always a risk and very important to understand and evaluate beforehand. Good luck!</p>
<p>The post <a href="https://kapps.io/unity-ecs">Improving a Unity project: what is ECS and is it worth using it in development</a> appeared first on <a href="https://kapps.io">KAPPS</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kapps.io/unity-ecs/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
