

Taras Leskiv
18 min read - Aug 13, 2020
The business of building code plugins for game engines
What it takes to build native mobile plugins for Unity and Unreal Engine, how the marketplaces compare, and the lessons we learned turning plugins into a business.
Hello, fellow (game-)developers! Especially those familiar with Unity and Unreal Engine!
In this article, I would like to share my experience over the last 4 years as Unity Asset Store and Unreal Engine Marketplace plugin developer/publisher. I will show some numbers, compare both stores, give some tips, explain what worked for me and what did not. Creating assets/plugins most likely will not substitute your main job. But I think the experience of building products and some additional income are worth doing it.
Disclaimer
More specifically, I will be talking about creating mobile integration plugins for Android and iOS. This area of expertise is very niche and the market is tiny. But hopefully, you will enjoy the read and maybe extract a few bits of useful info here and there.
Few words are repeated all the time in this article so I will use these abbreviations:
- Unity Asset Store - UAS
- Unreal Engine Marketplace - UEM
- Unreal Engine 4 - UE
This is a long read, but, sorry, I have to get this out of my system. So let us get started!
Origin of the idea
It all began in the summer of 2016 when I was working for a company that was building an Android/iOS SDK. This SDK augmented games with social features like invites, chat, activity feeds. There was also the Unity SDK which I was responsible for. It was a wrapper of the native ones with some cool features that made the integration process seamless.
While at it, I have learned a few pain points of game developers that use Unity:
- They (usually) hate and do not want to write native Android/iOS code and are reluctant to leave the land of C#
- They are ready to buy something to help them with native code struggle. It is always cheaper to buy a plugin rather than learn Java and how to use JNI from C#
At work, I gained some knowledge that I could use to create a product of a higher quality than those already in the store. That is why I have decided to create my plugin that helps to use native Android features in Unity. The first version of the plugin contained the functionality to show native dialogs and date/time pickers, share images to other apps, etc.
There were already some plugins on the Asset Store that were doing exactly that but I still rolled out the first version putting a price tag of 7$.
The beginning
First sales
I was not expecting much but immediately after publishing, people started buying some. Here is my first revenue statement.
I consider it a good start and these initial sales have inspired me to start looking for ideas for new assets.
Some successes
To begin with, this is the timeline of UAS net sales since 2016 to give a big picture. The major releases and events are annotated.
A few months later after the first plugin release, inspired by first sales, I created the iOS version of the plugin which also started selling well.
Google Maps View - my "magnum opus"
Once, I was looking for a mobile map solution and noticed one interesting issue. All of the plugins that were displaying the map had poor performance because they were either showing a web view or just loading textures into tiles. I thought why not bring the native Android Google Maps SDK experience to Unity? In a week I had a working prototype. It was showing the native Android GoogleMap on top of the Unity game. In two years, the asset grew from a small Android (13$ price) solution to a large project (85$ price). Today, most of my UAS revenue still originates from this asset. Since Corona outbreak, the sales went down a bit and my theory is that people are now making fewer travel apps :).
Since the beginning, I have been adding features and fixing bugs all the time. I also bumped the price each time the release included some major useful updates.
Some "failures"
Not every asset that I made was successful. On the contrary, most of them were not. I enjoyed coding editor tools and utilities, but almost nobody was buying them in the end. One asset which I am proud of was Project View Stickies - it allows attaching colorful notes to your files and scene objects. Eventually, I just made all my "failures" free.
Eventually, I have added all the features I could think of to my Unity Assets and could not think of any new ideas. The revenue was stable but I was out of ideas on what to do next.
The new hope - Unreal Engine Marketplace
At the same time, in the summer of 2018, I have relocated to my home city to start a small company with my friend. My friend is a C++ developer so we started exploring UE which also has a very active Plugin Marketplace.
We were brainstorming about where to start and the conversation was eventually like this:
There were no plugins there for exposing native Android/iOS features so we built iOS Goodies, Android Goodies, and Google Maps View for UEM.
The second wave on UEM Plugins
Then the perfect storm happened. There was one company that had the solutions for Firebase, Facebook, AdMob, and other most popular plugins as well. While we were creating competing products the competitor's products just vanished. Later we found out that they had been abandoned. In 2020, we built Firebase Goodies, AdMob Goodies, and Facebook Goodies.
Currently, we continue our mission to enable UE developers to seamlessly integrate any popular 3rd-party solutions. There are a lot of features still missing in our products and we are working on it. At this moment we are working to have Firebase Goodies support everything that Official Firebase Unity SDK supports.
Our short-term goal is to become the go-to place for mobile solutions in UE, the ambitious long-term goal is to make the companies behind the SDKs to notice our solutions.
And if you are wondering about the numbers, this our revenue statement on UEM. The spike, in the end, is attributed to new product releases and some sales.
We see a big potential on UEM for our plugins since the competition there is not so fierce and it is relatively more difficult to create plugins for it. Also since Fortnite came to mobile, Epic Games started putting more effort into UE to work better on mobile devices. This in turn attracts new developers to use the engine.
One cool thing to mention is that Android Goodies was selected as the featured free marketplace content in March 2020. In a nutshell, it means that your plugin is free for one month and Epic Games pays you 7500$. How cool is that?
A pinch of open-source
While at it we have also created an open-source MQTT plugin that works on iOS/Android/Windows/Mac and Bluetooth low-energy plugin for iOS/Android.
On the bright side
So what are the main positive effects of getting into this business?
Experience of building products
It is much more fun than doing contract work and obviously scales better since you can sell as many copies as customers are willing to buy. You will also learn some new skills like marketing, making graphics, etc.
A reliable source of additional revenue
Even though it might not be much, selling products provides a steady and reliable source of income and does not fluctuate a lot. I would not exactly call it a passive income because of support, but at some point, when your asset/plugin is feature-rich and sells well you get a very stable source of income with the occasional effort of fixing bugs and adapting to new engine versions.
Various competitions and perks
There are few programs that you can apply to win some cash, for example on UEM:
- Epic MegaGrants - you can submit the project you are working on and if Epic Games thinks it is awesome they will give you some cash to facilitate your development with no strings attached. We have been applying for this program twice already, but third time is the charm, right?
- Free monthly content submissions - your plugin becomes free for a month and you get 7500$, not bad, right? One of our plugins participated in this program.
Having successful products attracts contracts
When you have successful products on UAS or UEM there will be clients who will urgently need some functionality in your plugin. You can kill two birds with one stone, and (if it matches your roadmap) do this work on a contract basis. You can also meet some interesting people this way.
Having specialization attracts even better contracts
The market is small and having your products out there makes you easily discoverable by people looking for such services. Since the (mobile native plugin development) market is quite small and plugins are relatively difficult to create you can charge higher rates if clients reach out to you directly.
On the dark side
Our goal is to grow this activity into a sustainable business. We are not sure yet sure if that is possible. There are some challenges that make it difficult:
- First of all, the size of the market, there is a very limited number of people that need mobile native integration solutions at any given time. If the engine community and number of developers will grow, the plugin market will grow as well
- There is a risk of creating products that nobody needs. See the failures section above.
- Continuous support. After the customer buys your asset/plugin, he effectively gets a subscription to the lifetime support of the product. A good amount of time would need to be invested to talk to customers and troubleshoot issues. Sometimes issues are difficult to pinpoint, reproduce, and debug. We always try to help and get to the bottom of the issue. Sometimes it takes a lot of effort, but it is part of the job.
- It is difficult to scale at a certain point. Since the market is small and there are so many plugins you can create, the amount of effort and time you put into the asset may not be proportional to the revenue boost.
- Competition (duh)
Just comparing. Unity vs Unreal Engine
Now that you know our story and why to get into all this, let us compare the publishing experience. How is UAS different from UEM from a publisher standpoint?
1. The revenue cut
Unity takes 30% cut of the revenue, UE takes 12%
Epic Games (UE4) used to take 30% as well but in the summer of 2018, it had decided to reduce it to 12%.
Quote from the blog article:
Thanks to both the Marketplace's growth and the success of Fortnite, Epic now conducts a huge volume of digital commerce, said Tim Sweeney, founder and CEO of Epic. "The resulting economies of scale enable us to pass the savings along to the Unreal Engine Marketplace community, while also making a healthy profit for Epic."
This provided a great incentive for us to start creating plugins for UE.
With Unity, you had to pay the wire transfer fee (around 25$) some time ago but this is not the case anymore.
2. The market size
UAS is huge comparing to UEM but a bit oversaturated, which means there is much more competition. It is simpler to come up with some interesting innovative ideas for UEM.
3. Publisher dashboard usability and submission process
Here I will just list the good, the bad, and the ugly features of the publisher dashboards. In general, they are quite functional and I am quite happy with both of them. Most of the negative points mentioned are just small annoyances and ranting. But I feel if two companies had a closer look at what each other is doing they could do so many useful things.
In Unity
Unity just does it better than UE:
- Vouchers functionality - this is one of the features I lack on UEM. Being able to gift someone your asset is fantastic. It also facilitates some cool initiatives like DevDog Christmas giveaway. Hope the UE team will pick up this practice as well.
- Package upload process using Unity Asset Store Tools - it is a package that you import into your project, authenticate with Unity account and it allows uploading your plugin right from the editor.
- The fact that you see the purchases in the report immediately when they happen.
- Provides a clear monthly revenue report
- Paid upgrade feature is nice, you can publish two packages like lite and normal version and ask users to pay the difference later
Unity just does it worse than UE:
- You can only look at your sales report on a per-month basis, no way to generate yearly/timeframe reports
- No way to find out that customer left a review unless you check the reviews regularly. Some customers (for some reason) report issues on the review page and if you forget to regularly check the reviews section of your product they will go to limbo.
- When you update any part of your product (e.g. only price or just fix a type in product description), you need to go through the same boring process: 1) Create draft 2) submit update 3) wait for the review team to approve it. As a result, it takes a couple of days to update the plugin description. If I need to change the link in the description people will use the old link until the update is live. And they will complain.
- Even though they ask to fill out some feedback forms here and there, I do not feel there is much progress made in the usability of the dashboard. The main idea is of course that it should work, but taking into account the 30% revenue cut you would expect some active development to happen there
- When you edit your package, every time you change a text field or an image, the whole page has to reload. It is annoying if you would like to make some small edits to your package
- At some point, Unity has decided that the best way to provide you with messages/info/updates is to stack them on top of the page. No, you cannot dismiss those :)
- Quarterly payouts. Not a big deal but, well, monthly is better :)
In Unreal Engine
UE just does it better than Unity:
- Nice and simple UI
- You can update each part of your plugin immediately, like the price, description, graphics, etc. Everything except the binaries. You do not need the review team to approve these changes
- UEM sends emails when customers review your asset or ask a question
- You can generate your sales report up to 18 months
- Reviews and Questions functionality on the product page. This was introduced recently but I just love the way it works. You have a clean separation between reviews and inquiries about the products. And you can even have small discussions.
- Monthly payouts
UE just does it worse than Unity:
- No voucher functionality, you cannot gift your asset to anyone, make a giveaway, etc. This limits your marketing possibilities. You can still just send the files, but hey, they will come knocking on your door when the new update is out.
- Very annoying character limits on asset description. As you keep adding features the description does not fit anymore so you need to get creative and concise.
- When creating a draft of the new package you must provide ALL the required fields and graphics of the specific sizes to just create the draft. It is inconvenient as you need to create some graphics placeholders of exactly the required size to create a plugin draft.
- The very annoying default way of showing your default sales report. The previous month's earnings are included by default. As a result, you must always tweak the date picker to find out what are your earnings this month so far.
- Slightly annoying that your sales report is updated only once a day in the morning.
- Every time you need to update your payout details, you need to email support to unlock the form for you. And this is even if you have 2FA enabled on your account.
- Small annoyance that your session expires all the time. Probably a security thing.
- When submitting the new version of the content zip, you just edit the previous versions, editing existing release is a bit error-prone. Would be a bit better to have a draft and to swap it with production when ready.
Common (love)
- Both engine support teams are very responsive and responsible, kudos to you guys!
Common (pain)
- Neither UAS nor UEM provides the API to access sales reports, there are lots of things that I would love to automate this way.
- No functionality to export your sales data (.xls or .csv). I am copy-pasting all the things into my Excel spreadsheet manually
4. Engine updates compatibility
This is about where your plugin would still work if there is a new engine version update.
In Unity
Unity is careful when they deprecate their APIs or change something. There is a grace period for changes. Occasionally things break but most of the time even major version updates will be fine without update resubmission.
In Unreal Engine
With every major release of UE, your plugin will most likely break. APIs change and get removed that is why UEM does not even allow to automatically provide the same plugin files for new Engine versions. It means that when the new engine version comes out you must resubmit the files. Even if nothing in your plugin needs to be changed.
Being a more efficient publisher
The main selling point of your asset or plugin is its core functionality and your sales will be proportional to the value you bring to the game developers. But there are still a few things you can do to boost your revenue, improve your customer experience, or just work more efficiently. This section is about the lessons learned. Let us discuss them!
The golden rule of customer support
But first, let me introduce the golden rule of customer support:
Do everything you can to enable the customer to find the info he needs before he decides to contact you.
This should be self-explanatory, but let me elaborate a bit. You are going to have thousands of customers if your asset is successful. They all will have questions, requests, complaints, and other problems. Thus, to not be buried in support emails, you need to build an efficient way of communicating with your clients and having as much info available to them beforehand as possible. Lots of advice below helps to facilitate the golden rule. Some of the clients will just reach you out, regardless of all your efforts, but in this case, you should be able to just point them to the info.
1. Experiment with pricing
When coming up with the price for your asset you should take mainly these factors into account:
- The competing products with similar functionality (duh)
- The complexity of your solution and value it brings to your user
- How specific is the task that your tool solves? The more specialized the tool is, the fewer copies you would sell so it makes sense to make it more expensive
But regardless of these factors, you should try changing your prices and monitoring your revenue. Sometimes, you can find out that clients do not mind paying an additional 10-20$ for your asset. Sometimes the most effective way of boosting the revenue is just increasing the price.
Part of the sales comes from companies buying your asset for some project, so if your tool does a good amount of heavy-lifting for them it does not really matter, whether it costs 30$, 50$, or 75$. On the other hand, it makes a big difference for indie devs and students. The best way to find out is to experiment!
2. Be very explicit in your description
State explicitly (and highlight!) what your asset is exactly, but more importantly what your asset is not. Which platforms your asset works and more importantly on which it does not.
3. Write excellent documentation
Creating good documentation is crucial to the success of your plugin. Having a well-documented asset saves a great deal of time. This will save countless hours of supporting your customers and answering their questions. Most of the time the client will find the answer in your docs. Even if he does not you would be able to answer the question by just pointing to the docs instead of typing it out.
We use docsify which is a great tool to write documentation. You write in markdown and the site is generated automatically. We also host it on Firebase Hosting with our custom domain name and have a Jenkins job to publish the new version whenever anything gets pushed into the repo master branch.
Also, make sure your documentation has a dark theme :)
4. Create a Discord support server
Looking back at this, creating a support Discord server was one of the most productive improvements in the process. It is just a great tool for customer support, just to name a few things:
- You can create a separate channel for each asset conversation and logically group channels
- You can present the welcome message to the user joining urging him to read the docs before writing a message
- It enables your customers to talk to each other and sometimes solve each other's problems
- You can create an
announcementschannel to ping users about updates
5. Ask(beg) for ratings and reviews
Reviews are a very important factor that contributes to your product success. This is the first thing that your potential client will check - whether you can be trusted as a publisher and how happy are others with the product.
There is one simple trick to get those. You would usually get a lot of support and after you have helped the person you can ask them to rate their experience working with your product and support. I just have a template sentence for this.
6. Be thorough with initial asset submission
When submitting your plugin for the initial review double-check all the requirements for the Marketplace guidelines and Asset Store submission guidelines. Initial reviews are strict and more thorough than subsequent ones. If you fail to comply with all the requirements your asset will get rejected. You will need to fix all issues and resubmit again.
Below are the most common submission mistakes.
For UE check whether
- all your source files have licensing headers
2.6.2.b All source and header files must contain a commented copyright notice (not the auto-generated Epic Games text) notating the publisher's name or company name as well as year of intended publishing.
- you put the correct store link in your
.upluginfile - you need to include any libs licensed under GPL, LGPL, EPL, or MSPL. If you do, you need to eliminate those because UEM does not allow it. It is especially relevant if you want to wrap some native libs
2.2.f Products must not use third party software licensed under GPL, LGPL, EPL, or MSPL.
For Unity check whether
- you have the document with some documentation in the root of your folder. It does not have to be complete but it is a must. Mine is a PDF or text file pointing to my docs web-site since you will always forget to update docs that are included with the plugin
- your plugin works fine in Editor and when running the game on desktop platforms
- you did not hardcode any sensitive information, like API keys
For both Unity and Unreal Engine check whether
- any of your graphics contain any copyrighted materials. A few years ago Unity did not care much, but now they do. Mainly, make sure there are no 3rd party logos on your graphics, even on screenshots
7. Create a release checklist
Also, I recommend creating a release checklist and going through it each time when submitting an update.
My Unity Asset Store release checklist
Unity Asset Store release checklist
What's next?
Currently, we are focusing on Unity and Unreal engine but we are always monitoring marketplaces for other game engines, maybe it would be viable to migrate our plugins to Godot, Game Maker studio, or Defold? Please let me know if you have any thoughts on this.
For now, I hope you learned a thing or two from this article or at least had some fun!
If have any feedback feel free to reach me out as tleskiv at ninevastudios.com.