{"id":959,"date":"2019-11-26T18:00:00","date_gmt":"2019-11-26T17:00:00","guid":{"rendered":"http:\/\/cmagazine.test\/evolving-unity-the-data-oriented-tech-stack\/"},"modified":"2019-11-25T19:09:36","modified_gmt":"2019-11-25T18:09:36","slug":"evolving-unity-the-data-oriented-tech-stack","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/","title":{"rendered":"Evolving Unity: the Data-Oriented Tech Stack"},"content":{"rendered":"<p>When we look at Unity, it is clear how far it has come in 15 years. From humble beginnings, to a powerhouse that can run and render incredible games, short movies, and other experiences. However, as the scope and size of the projects people create with Unity grows and grows. It has become clear for us that we need to evolve Unity to a different level.<\/p>\n<p>This evolution comes in the shape of what we call the <b>Data-Oriented Tech Stack<\/b> or &#8211; in short &#8211; <b>DOTS<\/b>.<\/p>\n<p>But\u2026 presentations first! My name is Ciro, and I work at Unity as an evangelist. It is my job to travel to conferences and keep people updated on the latest Unity trends and technology. As DOTS is a technology most interesting to programmers, this year I chose <strong>Codemotion<\/strong> as the perfect venue to talk about it.<\/p>\n<p><strong><a href=\"https:\/\/events.codemotion.com\/conferences\/milan\/2019\/\">Click here to discover more about Codemotion Milan 2019, and how Unity will be involved in this event!<\/a><\/strong><\/p>\n<h2>Performance by default<\/h2>\n<p>You probably heard this sentence before, \u201cPerformance by default\u201d, as it\u2019s one of the central concepts of this evolution. We are aiming to build a new Unity where not only we unlock new levels of performance, but we do it \u201cby default\u201d. This means that whatever you do your game will run faster than before, and you will have to <b>spend less time building strategies to optimise your game<\/b>.<\/p>\n<p>Unity\u2019s co-founder and CTO, Joachim Ante, introduced this concept for the first time around GDC 2018. The whole first part of this video outlines very well the founding principles of DOTS:<\/p>\n<p><center><br \/>\nhttps:\/\/www.youtube.com\/watch?v=aFFLEiDr3T0<\/center>To achieve our goal we\u2019re attacking the problem on different sides, and that\u2019s why DOTS is a collection of different pieces of technology, all working together. Let\u2019s look at them one by one.<\/p>\n<h2>C# Job System<\/h2>\n<p>We are at a point in history where we know we cannot count anymore on single processor threads to become faster, because of physical limitations on how they are built. As such, fast computing relies on processors with multiple cores. Programmers who go this route must then deal with <b>multi-threading<\/b>.<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1163\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image1.jpg\" alt=\"\" width=\"768\" height=\"432\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image1.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image1-300x169.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image1-400x225.jpg 400w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/center>But writing solid multi-threaded code in games is quite hard, as games are very complex simulations where many different processes happen in parallel, often operating on the same data. This can cause <strong>race conditions<\/strong> and <strong>deadlocks<\/strong>, which due to their nature are very hard issues to debug. And this is where the C# Job System comes in.<\/p>\n<p>Unity\u2019s C# Job System is like a window into the underlying C++ Job System, which has powered the Unity engine for quite a while now.&nbsp;This means that your C# code will be run alongside Unity\u2019s own tools, to <b>fully utilise all of the CPU threads to their full potential<\/b>. This is in contrast to a situation where regular C# code is generally single-threaded, which is the case for almost all Unity games today. In fact, many Unity games are \u201cCPU-bound\u201d, meaning that the GPU is waiting because the CPU is overloaded, causing drops in framerate.<\/p>\n<p>The Job System also features a robust <b>safety net<\/b>, which catches race conditions before they happen by analysing how jobs access memory, and produces warnings in the console. This allows you to clearly see where the problem is, rather than just watch your game crash with no explanation.<\/p>\n<h2>Burst Compiler<\/h2>\n<p>This new compiler goes hand-in-hand with the C# Job System, and makes it even faster. In short, it takes C# jobs and produces highly-optimized machine code, compiled differently for different CPU architectures to take full advantage of each.<\/p>\n<p>Compiling jobs with Burst makes them much faster than before, sometimes even faster that equivalent code written in C++. Explaining how Burst does this is beyond the scope of this short piece, so I invite you to read <a href=\"https:\/\/blogs.unity3d.com\/2019\/02\/26\/on-dots-c-c\/\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">this great blog post<\/a> on the subject by Unity Technical Director Lucas Meijer.<\/p>\n<h2>Entity Component System<\/h2>\n<p>When talking about unlocking performance, another piece of the puzzle is <b>memory layout<\/b>.<\/p>\n<p>When working with Gameobjects in Unity, we have a situation where each of them is stored somewhere in the main memory (the RAM). All of their Components are somewhere else in memory, not necessarily in a nearby location. So all of the parts that you need in a certain game routine can be spread all over the memory.<\/p>\n<p>When a game runs, the CPU is <b>continuously fetching data<\/b> from the main memory to bring it to the CPU cache and operate on it. As such, if these fetch operations only find very little useful data (because it\u2019s spread apart) then your game is wasting a lot of CPU time. Now multiply this by every single operation in your game, and you can see why this can limit the amount of things that can happen while keeping a decent framerate. This not only affects gameplay, but also the size of your game, since it is possible that you can\u2019t \u201cstream in\u201d objects and levels as fast as you would need. Can we fix this?<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1165\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image2.jpg\" alt=\"\" width=\"768\" height=\"432\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image2.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image2-300x169.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/image2-400x225.jpg 400w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/center>Enter the <b>Entity Component System<\/b> (<strong>ECS<\/strong>). In ECS, things are laid out in memory in a much different way.<\/p>\n<p>First, Gameobjects are no more. In place of them ECS has <b>Entities<\/b>, which are not much else than an ID in an array that belongs to an \u201cEntity Manager\u201d. Differently from Gameobjects, you don\u2019t do the work on individual entities, but you operate on them in bulk.<\/p>\n<p>Components still exist, and largely have the same role that they have had until now. They add qualities to objects, and you can attach and detach them at will, just like before. This means that ECS retains the flexibility of composition which characterised Unity since the start. The difference: ECS Components are only data, no logic.<\/p>\n<p>Now for the good part. In ECS, Entities that have the same Components are grouped into what we call <b>Archetypes<\/b>. Components of objects that share the same Archetypes are packed into memory next to each other (as in the image above, on the right). This change alone makes it so that when a piece of code is iterating on several objects, it can efficiently find them and move them in bulk to the CPU cache, operate on them, and move on.<\/p>\n<p>This is possible because logic is not on the individual object itself, like it used to be for MonoBehaviour scripts, but rather in a separate location: <b>Systems<\/b>. Systems are scripts that explicitly declare which entities they are interested in by filtering the game world by Archetype. Much like a query on a database, this enables them to find all of the entities they need without costly GameObject.Find or GetComponent calls.<\/p>\n<p>To recap: Gameobjects become Entities, Components are still present (but are now only data), and instead of Monobehaviours we now have Systems. Easy, right?<\/p>\n<p>This seemingly simple sentence obviously has big implications on the way we will create games in Unity, and on the direction Unity is taking. There are also other sides (and benefits!) to it that I can\u2019t cover here in the space of one article.<\/p>\n<h2>The future of Unity<\/h2>\n<p>If you are interested to learn more about DOTS, we have <a href=\"https:\/\/unity.com\/dots\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">a landing page<\/a> on the Unity website. Also, DOTS will be a centerpiece of the upcoming Unite Copenhagen event. Even if you are not going, you will be able to catch the keynote online <a href=\"https:\/\/www.youtube.com\/watch?v=gyqIZP_zLtU\" target=\"_blank\" rel=\"noopener nofollow noreferrer\">on YouTube<\/a> on the 23rd of September.<\/p>\n<p>After that, I will be going into more detail about DOTS at both <strong>Codemotion Milan<\/strong> (Oct 24th-25th) and <strong>Codemotion Berlin<\/strong> (Nov 12th-13th) 2019. I will be hosting a talk and a Lab at each location.<\/p>\n<p>You can already <strong>book a spot<\/strong> at the Labs in Milan <a href=\"https:\/\/events.codemotion.com\/conferences\/milan\/2019\/schedule\/the-future-of-unity\/\">here<\/a> and Berlin <a href=\"https:\/\/events.codemotion.com\/conferences\/berlin\/2019\/schedule\/the-future-of-unity-get-started-with-using-ecs-and-dots\/\">here<\/a>.<\/p>\n<p>DOTS brings big changes to Unity, and it might take a while before all of these pieces fall into place properly. However, even if you won\u2019t use DOTS in your projects now I suggest to take a look at it to be ready for the future.<\/p>\n<p><img id=\"hzDownscaled\" style=\"position: absolute; top: -10000px;\"><\/p>\n<p><img id=\"hzDownscaled\" style=\"position: absolute; top: -10000px;\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>When we look at Unity, it is clear how far it has come in 15 years. From humble beginnings, to a powerhouse that can run and render incredible games, short movies, and other experiences. However, as the scope and size of the projects people create with Unity grows and grows. It has become clear for&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/\">Read more<\/a><\/p>\n","protected":false},"author":80,"featured_media":962,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[15],"tags":[],"collections":[],"class_list":{"0":"post-959","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-gamedev","8":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Evolving Unity: the Data-Oriented Tech Stack - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Evolving Unity: the Data-Oriented Tech Stack\" \/>\n<meta property=\"og:description\" content=\"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-11-26T17:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"675\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ciro Continisio\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ciro Continisio\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/\"},\"author\":{\"name\":\"Ciro Continisio\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/5a0af0e21c8ab85e9d7910135c0b60a0\"},\"headline\":\"Evolving Unity: the Data-Oriented Tech Stack\",\"datePublished\":\"2019-11-26T17:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/\"},\"wordCount\":1349,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/dynamicvehicles2.png\",\"articleSection\":[\"Game Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/\",\"name\":\"Evolving Unity: the Data-Oriented Tech Stack - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/dynamicvehicles2.png\",\"datePublished\":\"2019-11-26T17:00:00+00:00\",\"description\":\"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/dynamicvehicles2.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/dynamicvehicles2.png\",\"width\":1200,\"height\":675},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/evolving-unity-the-data-oriented-tech-stack\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Game Development\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/frontend\\\/gamedev\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Evolving Unity: the Data-Oriented Tech Stack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/5a0af0e21c8ab85e9d7910135c0b60a0\",\"name\":\"Ciro Continisio\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g\",\"caption\":\"Ciro Continisio\"},\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/ciro-continisio\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Evolving Unity: the Data-Oriented Tech Stack - Codemotion Magazine","description":"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/","og_locale":"en_US","og_type":"article","og_title":"Evolving Unity: the Data-Oriented Tech Stack","og_description":"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).","og_url":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2019-11-26T17:00:00+00:00","og_image":[{"width":1200,"height":675,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png","type":"image\/png"}],"author":"Ciro Continisio","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Ciro Continisio","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/"},"author":{"name":"Ciro Continisio","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/5a0af0e21c8ab85e9d7910135c0b60a0"},"headline":"Evolving Unity: the Data-Oriented Tech Stack","datePublished":"2019-11-26T17:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/"},"wordCount":1349,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png","articleSection":["Game Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/","url":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/","name":"Evolving Unity: the Data-Oriented Tech Stack - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png","datePublished":"2019-11-26T17:00:00+00:00","description":"Unity projects are growing day by day, so Unity is evolving to a different level.This evolution comes in the shape of the Data-Oriented Tech Stack (DOTS).","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png","width":1200,"height":675},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/evolving-unity-the-data-oriented-tech-stack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Frontend","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/"},{"@type":"ListItem","position":3,"name":"Game Development","item":"https:\/\/www.codemotion.com\/magazine\/frontend\/gamedev\/"},{"@type":"ListItem","position":4,"name":"Evolving Unity: the Data-Oriented Tech Stack"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/5a0af0e21c8ab85e9d7910135c0b60a0","name":"Ciro Continisio","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2ecca6b34487c56eed897a50ca4446d314ca087cb5756590af88bf56938aab9c?s=96&d=mm&r=g","caption":"Ciro Continisio"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/ciro-continisio\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-600x600.png","author_info":{"display_name":"Ciro Continisio","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/ciro-continisio\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png",1200,675,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-300x169.png",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-768x432.png",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-1024x576.png",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png",1200,675,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png",1200,675,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2.png",100,56,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/09\/dynamicvehicles2-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"Ciro Continisio","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/ciro-continisio\/"},"uagb_comment_info":0,"uagb_excerpt":"When we look at Unity, it is clear how far it has come in 15 years. From humble beginnings, to a powerhouse that can run and render incredible games, short movies, and other experiences. However, as the scope and size of the projects people create with Unity grows and grows. It has become clear for&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/959","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/80"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=959"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/959\/revisions"}],"predecessor-version":[{"id":1643,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/959\/revisions\/1643"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/962"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=959"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}