{"id":3566,"date":"2015-04-26T13:54:55","date_gmt":"2015-04-26T12:54:55","guid":{"rendered":"http:\/\/t-machine.org\/?p=3566"},"modified":"2015-12-31T18:33:31","modified_gmt":"2015-12-31T17:33:31","slug":"kickstarting-entity-systems-in-unity3d-what-to-include","status":"publish","type":"post","link":"http:\/\/new.t-machine.org\/index.php\/2015\/04\/26\/kickstarting-entity-systems-in-unity3d-what-to-include\/","title":{"rendered":"Kickstarting Entity Systems in Unity3d &#8211; What to include?"},"content":{"rendered":"<h2>A first-class Entity System for Unity3D<\/h2>\n<p>Unity is a great 3D engine and a good editor &#8211; but the programming environment is 10-15 years behind the curve. <em>Entity Systems are a much better way of writing games, but they are surprisingly difficult to add to Unity.<\/em><\/p>\n<p>I&#8217;ll bring the latest in modern ES techniques to Unity, turning parts of it from a &#8220;weak&#8221; programming environment into &#8220;one of the best&#8221;. In game-engine terms, this will put it far ahead of the pack.<\/p>\n<p>This blog post is testing the waters:<\/p>\n<ol>\n<li>You can give me direct feedback on the proposed contents\/scope\n<li>I can start to see how much interest there is in making this\n<\/ol>\n<h2>First round of feedback<\/h2>\n<p>A lot of people read this and got the impression I was going to charge them extra for the final product, and provide a library with no tutorials. Big confusion and misunderstanding! So, I&#8217;ve reworded those bits to be clearer.<\/p>\n<h2>Kickstarter: planning the campaign<\/h2>\n<h3>Target Audiences (Expected)<\/h3>\n<p>I think I have four target audiences:<\/p>\n<ol>\n<li>Newbie devs, and non-programmers (artists, designers), who find the &#8220;coding&#8221; parts of Unity overwhelmingly difficult today\n<li>Unity devs who&#8217;ve never used an Entity System on a real game project, and don&#8217;t know what they&#8217;re missing. They may have a lot of experience (shipped multiple games), or none (University\/College students).\n<li>Small Indie teams \/ sole coders who&#8217;ve used Entity Systems elsewhere, and feel that coding in Unity is slow, error-prone, boring, frustrating, and time-wasting by comparison\n<li>Large Indie teams whose games won&#8217;t work in Unity because Unity is so bad at scaling to large projects. They&#8217;ve already re-written or replaced substantial chunks of Unity&#8217;s core so that it&#8217;ll work fast enough \/ reliably enough.\n<\/ol>\n<h2>Types of Reward<\/h2>\n<h3>Reward type 1: Discounted License<\/h3>\n<p>Everyone who backs the KS gets a copy of the library \/ license to use it. By backing the KS (at any level) you&#8217;re getting a substantially cheaper purchase compared to the final launch pricing on the Asset Store.<\/p>\n<p>There might be some options here for different team sizes, different levels of support, etc.<\/p>\n<h3>Reward type 2: Expert Knowledge<\/h3>\n<p>When you have non-trivial questions about ES design and usage, it&#8217;s hard to get the attention of experts. They&#8217;re usually experienced, older, programmers with young families, or working in senior jobs. They have little free time.<\/p>\n<p>Big developers fix this by hiring experts for a few days at a time. But small teams\/individuals can&#8217;t afford the &#8220;entry&#8221; cost &#8211; as a Consultant, you need to charge at least $5,000 per engagement to cover all the admin overhead and hidden costs.<\/p>\n<p>So, we have some options here to give everyone this kind of access.<\/p>\n<h3>Reward type 3: Source Code<\/h3>\n<p>In mainstream IT, when you purchase a library you rarely (if ever) get the source code. If you find bugs, or missing features, the vendor works hard and fast to fix them for you.<\/p>\n<p>In the games industry, it&#8217;s the other way around: vendors take no responsibility for the code they&#8217;ve sold you, and in return &#8230; they give you full source access. &#8220;Fix it yourself, dude!&#8221;<\/p>\n<p>If I let everyone have source, it raises my support costs. With each change, it won&#8217;t work for some people &#8211; because they&#8217;ve modified their copy &#8211; and I&#8217;ll have to help them update it.<\/p>\n<p>On the flip side: Source code is your &#8220;Plan B&#8221; in case I get sick, or sell-out, or lose interest in the project, etc. It also gives you an easy way to add features of your own and send them back to me (which I then take on responsibility for maintaining).<\/p>\n<p>I&#8217;m offering this, but it&#8217;ll be a high-cost. The teams that really need it should have no problem justifying the cost.<\/p>\n<h2>Types of Stretch Goal<\/h2>\n<p>To clear up confusion: these are things that would be present in the core product (e.g. the GUI is going to be a major part of the library!), but stretch goals would allow me to add extras to each of them.<\/p>\n<h3>Goal type 1: Editor GUI<\/h3>\n<p>In my experience the biggest effect on programming speed &#8211; once you get past your innate ability + level of experience &#8211; is the quality and &#8220;friction&#8221; of your tools.<\/p>\n<p>As soon as you go beyond the simple stuff it&#8217;s damn hard to extend the Unity editor. But I&#8217;ve been hacking the Editor for a few years now, and I&#8217;m willing to do pretty much anything. Especially if it makes it easier to make games with!<\/p>\n<h3>Goal type 2: Example Games<\/h3>\n<p>The core will have some form of tutorials, but it probably won&#8217;t have a complete demo game.<\/p>\n<p>Writing a game just to demonstrate an API is extremely time-consuming, and it&#8217;s not what you&#8217;re paying for when you buy the library.<\/p>\n<p>But &#8230; it&#8217;s also a great idea: it improves the quality of the API, by giving me a reference product to check everything is as easy-to-use as intended. So I&#8217;d like to write one (or several), but I can&#8217;t do that on the base funding.<\/p>\n<p><em>(Aside: If I ran the technology division at Unity corp, they&#8217;d be writing and publishing games every quarter)<\/em><\/p>\n<h3>Goal type 3: Tutorials<\/h3>\n<p>There will be tutorials with the core library. They&#8217;ll cover the basics of how to use it.<\/p>\n<p>But &#8230; I&#8217;d like to go further, and do tutorials for every aspect. I&#8217;d like to do a written tutorial for everything, and I&#8217;d like to ALSO do a video tutorial for everything (some people only use written tutorials, other people only use videos. I&#8217;d like to make it great for both groups).<\/p>\n<p>With a new library, tutorials are extremely expensive to write. Minor changes to the API &#8211; bug fixes, refactorings, feature additions &#8211; invalidate whole pages of tutorial at one stroke.<\/p>\n<h2>Pricing and Funding levels<\/h2>\n<h3>Tier costs<\/h3>\n<p>These are <strong>approximate<\/strong> based on extrapolations of cost and expected &#8220;version 1.0&#8221; feature-set.<\/p>\n<ul>\n<li>License: $50-$150 (after launch, general public can buy at $200-$400 in Asset Store)\n<li>Source code: $300-$1000 (various amounts of support)\n<li>Access to experts: $150-$750 (various levels of privacy + interaction)\n<\/ul>\n<p><em>UPDATE:<\/em> One person has stated they would &#8220;never pay these prices&#8221;. That&#8217;s fine &#8211; they&#8217;re way outside my target audience. I&#8217;m more likely to increase these prices than decrease them. If you know what an ECS is, and understand the value, this is probably too cheap already.<\/p>\n<h3>Funding targets<\/h3>\n<p>This is what it&#8217;s going to cost to build:<\/p>\n<ol>\n<li>Minimal version that&#8217;s usable in most game-dev: <em>approx. $15,000<\/em>\n<li>My preferred v1.0: <em>approx. $75,000<\/em>\n<li>High-quality version for large games: <em>approx. $200,000<\/em>\n<\/ol>\n<p>I can write-off about 50% of the cost as this is a project that I need and will use myself &#8211; and it&#8217;s a labour of love. I can also add a %age in expected additional sales that happen naturally after the campaign has ended (from the Asset Store, etc).<\/p>\n<p>But Kickstarter takes a cut, and the government takes a cut, and Amazon takes a cut. In the end, I need a KS campaign to raise something like:<\/p>\n<ol>\n<li>Minimal funding: <em>$5,000<\/em>\n<li>Preferred funding: <em>$30,000<\/em>\n<li>High-quality funding: <em>$75,000<\/em>\n<\/ol>\n<h2>My situation<\/h2>\n<h3>Who are you, anyway?<\/h3>\n<p>In case you don&#8217;t know &#8230; I&#8217;ve run Technology\/Development for a couple of game companies (e.g. Mindcandy, NCsoft Europe). My StackOverflow score is <a href=\"http:\/\/stackoverflow.com\/users\/153422\/adam\">somewhere north of 20,000<\/a>. I&#8217;ve contributed to a few open-source projects, but the one I&#8217;m most active on is <a href=\"https:\/\/github.com\/SVGKit\/SVGKit\/\">the SVG rendering library for iOS and Mac<\/a>, where I&#8217;m the project lead and one of the top 3 contributors.<\/p>\n<p>I started writing about <a href=\"http:\/\/t-machine.org\/index.php\/2007\/09\/03\/entity-systems-are-the-future-of-mmog-development-part-1\/\">Entity Systems back in 2007<\/a>, mostly because I was frustrated that so many game studios were &#8220;doing it wrong&#8221;.<\/p>\n<h3>What I&#8217;m doing now<\/h3>\n<p>I teach non-technical people how to program. I work with schools, teachers, and directly with children\/adults. I invented a <a href=\"http:\/\/everyonecanprogram.com\">new system of programming using physical objects and toys<\/a>.<\/p>\n<p>Working with a local school, I&#8217;m making a new course where I&#8217;ll be teaching children &#8220;how to make games with Unity3D&#8221;. I&#8217;m particularly interested in what I can do to the Unity Editor to make it more user-friendly and better for use in the classroom.<\/p>\n<p>Depending on how this goes, I have a few people in mind I&#8217;ll hire to share the burden of writing this library. It&#8217;s <strong>something I need<\/strong> both in my day-job and in <em>all my personal game projects<\/em>. Doing it as a Kickstarter gives me the excuse to spend 100x as much time and effort on it as I would otherwise, and gives me a much better library than I&#8217;d get on my own.<\/p>\n<h2>Why Kickstarter?<\/h2>\n<p>I suck at Marketing. The biggest risk factor to this project is that I fail to make enough noise, and hence there&#8217;s too little money coming in to pay for the ongoing development and support. As a result, dev gets sidelined while I pay the bills.<\/p>\n<p>A Kickstarter is my way of testing &#8220;can I find a critical mass of people who need this project, and get them to put their money where their mouth is?&#8221;.<\/p>\n<p>It&#8217;s going to be hard &#8211; I suck at marketing &#8211; but to be honest I&#8217;m leaning heavily on the idea that this is something people want badly enough they&#8217;ll help me market and promote it. With KS, there&#8217;s no risk to you for helping here &#8230; if the campaign fails, you pay nothing. If it succeeds, I get enough cash (and enough users!) to guarantee development through to a production-ready version.<\/p>\n<h2>Are you in?<\/h2>\n<p><a href=\"http:\/\/t-machine.org\/index.php\/2015\/12\/12\/support-me-on-patreon-for-early-access-to-new-entity-systems-articles\/\">Support me on Patreon, writing about Entity Systems and sharing tech demos and code examples<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A first-class Entity System for Unity3D Unity is a great 3D engine and a good editor &#8211; but the programming environment is 10-15 years behind the curve. Entity Systems are a much better way of writing games, but they are surprisingly difficult to add to Unity. I&#8217;ll bring the latest in modern ES techniques to [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60,67],"tags":[],"_links":{"self":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3566"}],"collection":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/comments?post=3566"}],"version-history":[{"count":21,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3566\/revisions"}],"predecessor-version":[{"id":3764,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/posts\/3566\/revisions\/3764"}],"wp:attachment":[{"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/media?parent=3566"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/categories?post=3566"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/new.t-machine.org\/index.php\/wp-json\/wp\/v2\/tags?post=3566"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}