Search Unity

Valentine’s Day is coming up, and the Unity Engine is so excited! Last year it compiled a love letter to the Unity users, and it got a whole lot of love in return. It kept it all deep in the heart of its codebase, and sure enough, this year we once more found some output in the editor.log:

Dear User,

You amaze me every day. Ours is a longterm relationship, but I love how we both renew ourselves constantly and don’t take each other for granted. You’re the extrovert; you express your feelings on the forums, and you present great new games. I like to operate behind the scenes, enabling your success. You make me so proud – I think we’re the perfect match!

We have so much fun together when trying out new stuff and just forgetting time! Our journey is taking us to new and unexplored worlds, VR worlds, where we need to craft the landscapes together and set new standards. I will boldly go where no Engine has gone before, and together we will fight motion sickness.

Last year you expressed your affection in so many ways.

You wrote a volumetric raymarching shader in the shape of a pulsating heart.

You also wrote a rap song:

A few years ago, I couldn’t build a game,
but the desire was inside me like a glowing flame.
I was helpless, had the mind, the potential, the drive;
but the barriers would not simply let me survive.

Knocked out, felt dizzy and dead,
the telephone from my friend said – lazy head!?
You must get outta the bed,
Why not pursue your love and even earn some bread.

I looked at the computer, expecting a chocolate or heart
Instead, a box made outta three arrows promised me a brand new start
BOOM!, a brand new start, the passion stirred the heart,
it felt – I was no longer a directionless dart.

It is not about the game alone;
We appreciate the opportunity
And some financial immunity
Oh yeah we love Unity, we love Unity
Holler again «we love Unity, we love Unity».

And you wrote so many sweet things in your letters to me:

“I also know we don’t get to spend a lot of time together lately because of my new job, but don’t worry because that will change soon. You’ve inspired me in many more ways that you can imagine. Thank God I found you. Life without you would have been nasty, brutish and short :-P.”

“I hope the relationship we share will last a lifetime. Sure there are other game engines out there but why would i compile with an engine that doesn’t get indies like you do? You and I will jam together until my license on life expires. XOXOXOXOXO”

“Thanks for your wonder letter. I love you too. There isn’t any other 3D engine that makes me feel like you do and I look forward to many years together. I do hope you understand about my temporary fling with that other engine. If we’re being honest, I owed to myself and you to see if it was a better match. It wasn’t.”

“Unity, my dear,
I remember long ago when I used to just glance at you from across the web, but now, you are my everything. We’ve both said things we never meant, but somehow your error messages always seem to be right in the end.”

You are an endless inspiration. Dear User, will you be my Valentine?

Love you always,

How do you feel about Unity? Which parts do you love and which parts would you really like Unity to change? Are you planning to stay in the relationship or will you break up? You can send your Love Letter or Break Up Letter to the Unity UX Team at, and we will make sure that the Unity Engine receives it. Unity would also love to have a song or a poem or even a piece of art from you.

Happy Valentine’s Day!

The Unity User Experience Team

P.S. We are always looking for users who will participate in user research. We need all kinds of users from beginners to veterans, programmers, artists, students and managers, of all nationalities, gender and ages. Interested? Sign up at

34 replies on “Will you be my Valentine?”

My love for Unity fades with every new bug and bit of missing Editor functionality I encounter. New (unfinished) runtime features mean little when my workflow is slow, painful, and severely limiting. Continuing to use Unity would require a significant and immediate shift of focus to making my life as a developer better. Take a step back, fix and polish what you already have.

Like Unity. Invested lots of time and effort in it along with lots of money spent on the asset store.

There are many great dev engines out there now but non of them have the 2 things that set Unity apart. The asset store and the community. But I fear they could lose both.

Unity 5 should have been a fanfare event. Instead it just seems to be a burden. The amount of asset store developers on threads talking about needing to do patch updates just to keep the asset working is a sign of the state of things. It seems the amount of work involved is probably negating any financial incentive.

Unity should have stuck with 4 longer. Made v4 pro free and got 5 rock solid and easy access to asset store developers so they would have time to adapt.

I reckon most Unity devs are hobbyist, indies through to smaller dev houses with only an handful of larger companies. So don’t focus on AAA capability that most of the unity community don’t have the time or teams to make use of. Instead focus on reliability and tools, and then add the other stuff when it’s ready.

Unity need to have a serious rethink starting from the CEO down or next year John Riccittiello maybe writing the Unity dear John letter in time for it’s new majority shareholders to move in.

My love affair with Unity has been akin to the relationship with the mother of my daughter. At first, I was blinded by my affection. I looked past all the «bugs». I told myself to be patient and that, in time, things would work out. But time and time again I have been let down.

Clients are bailing on projects out of frustration and turn to Unreal. Performance problems, API problems, problems with so many Asset Store purchases not functioning properly since 5.1.2. WebGL still needs a lot of work, and while I understand that this feature is very ambitious, you let it loose too quickly. Which seems to be a growing trend with Unity, at least since 4.x.

You have, without a doubt, one of the best communities on the internet behind you. Leverage us. We love(d) this software, and there is a long list of us who are desperate for it to reach it’s potential. The first rule of business is that it is much harder to secure a new customer than it is to turn an existing customer into a repeat one, and a lot of us are about to bail. A lot of us already have.

I do love Unity, for everything it used to stand for and be. For everything that it is and could be, but this relationship has become incredibly one sided. You are giving all of your love to acquiring new users and leaving those of us, some of which have built a career around this amazing software, flapping in the wind. We aren’t asking for new bells & whistles; we are asking for the product that you have already sold us on to function the way in which you claim it should.

Maybe this year, instead of asking us to confess our affection for your product, you ask us what is causing us to fall out of love with this software, and you commit to fixing it. Maybe this year you show your love to the community that has helped make this software what it has become. Do this, and spend the next 365 fixing these issues, and maybe next year we will flock to this (currently inappropriate) blog post and thank you for your efforts. We will tell those who have left for Unreal that they can come back. We will commit to 12-year subscriptions over and over again because we finally have faith in the product again. Most importantly, we will show this love that you are asking for in a public venue willingly and without provocation. Unity used to deserve this, but it has absolutely fallen short of that this past year.

Earn it, and you wouldn’t need to ask for it.


Loving Unity3D free as a poor n00b indie – also love the effort the support team on the ground go to whenever I submit bug reports. Hope those at the top appreciate the coalface team keeping the engine running…

Do you love us enough for nesting prefabs?

I’m looking forwards the day there’s enough love for copy/pasting inspector variables… :(

I’ll admit that if I wasn’t already so far into my project I would be using UE4. I am still stuck on 5.3 because every ‘patch’ since then has broken something else severely. 5.3 itself is broken. Too broken to release but working well enough to not halt development. Sigh…

John / Christopher, do you have any specific unfixed bugs in mind that are badly affecting Unity 5.3 for you?

Do you have links to the fogbugz ids?

In my opinion, serialization and undo/redo really need to be addressed.

My asset customers want undo/redo and there is currently no good way for me to provide this; and believe me, I have tried many approaches from custom undo (two competing undo/redo systems – state corruption – fun!) to breaking data into smaller chunks to ease Unity’s diff.

So this continues to leave me with two options; a) do not provide undo/redo, or b) provide undo/redo and completely cripple my users’ workflows. Even just selecting an object that has a semi-large data structure causes Unity to grind to a halt because when the object is selected, the inspector seems to serialize continuously (even with a custom inspector implementation that doesn’t draw any of the serialized properties).

Breaking the data into smaller chunks certainly eases up a little on Unity’s undo/redo diff mechanism; although still far from optimal performance wise. But there is no good way to serialize the chunked data since Unity leaves the chunk objects behind in the scene whenever the user makes a prefab. And vanilla classes don’t help for the data chunks since they still contribute to the massive data diff.

Saving the data to .asset files is not an option for 3 reasons; #1 it causes confusion and workflow issues for my customers; #2 the asset file cannot refer to objects in the scene hierarchy; #3 each instance of the prefab needs to maintain its own instance of the data.

Feature Request #1 – If Unity’s undo API supported a command based pattern for undo/redo then I could add pretty good undo/redo support for my asset customers:

Undo.RecordAction(new DoSomethingAction(data, needed, to perform, or reverse, action));

This is way more efficient when working with larger data structures since the custom action implementation can retain only the delta that it actually needs without relying upon a large diff process.

Feature Requset #2 – To solve the problem of data ownership a new [SerializeCopy] attribute could be introduced which causes Unity to serialize and associate a copy of the field data (be it a ScriptableObject or a dynamically constructed Material) with the MonoBehaviour in its .prefab file or with a ScriptableObject in its .asset file.

The nearest MonoBehaviour/ScriptableObject in the data hierarchy would essentially take its own copy of the data. When an instance of the said MonoBehaviour or ScriptableObject is destroyed; the associated data can manually be released inside OnDestroy; I think that it would be a mistake for such a feature to automatically destroy the associated objects.

This would also make it considerably easier to manage data structures that utilize polymorphism since polymorphism is already supported for UnityEngine.Object’s. The only trouble is that there is no way to currently assign the ownership of ScriptableObject instances to the object that should own them.

A recent frustration of mine: It baffles me as to why Unity actually puts private fields through its serializer despite having this documented to the contrary. I’ve now started to annotate all of my private fields with [NonSerialized] just so that they don’t actually get serialized. According to a post in ( this “feature” is to support live-reload; but this has never really worked in my experience.

Unity seems to try and do a lot of “magic” things (like the above) which ultimately lead to confusion for the end users; especially when the strange behaviour isn’t documented.


Don’t get me wrong… I really REALLY want to continue to love Unity; but serialization and undo/redo are such a nightmare right now. Not to mention the fact that Unity updates keep finding new ways to break my asset. The inability to fully customize the way in which data is serialized is a real pain. Whenever I hit a roadblock; the ideal workarounds always seem to require using serialization in ways that it just doesn’t want to be used.

When I speak with other developers it always seems to come back down to serialization.

So, Unity… for valentines, perhaps give serialization some love; and I may have some roses for you :)

The biggest issues I’ve had with issues recently:

1) Priority over new flashy features like new the new lightmap baking system over core functionality that EVERY project uses in theory. Which leads me to my next problem

2) The prefab system causes most of the bugs that happen during development, either through an artist misunderstanding the concept and trying to use nested prefabs, a prefab that becomes instantly unlinked when placed in the scene, terrible support for merging prefabs, and very poor API support and documentation for creating them / managing them yourself. The worst part is, this is not a complicated thing, and should only take a programmer about a week of development. I’ve just resorted to not using Unity prefabs and accepting they will never be fixed, since they want to focus on flashy features that never end up being finished.

3) Features that are promised to be released usually make the release they were scheduled for, but are in what I would call a 10%-50% finished state. I don’t understand how the whole lightbaking system was swapped and replaced with one that works in such narrow use cases. I’ve struggled a lot with getting the lightmap baking to look anything like the how the scene looks unbaked. This used to be consistent. I also spent considerable amount of time swithcing over to the new networking code that was taken out of beta, only to find out that it is a broken mess full of bugs. Which brings me to my next point….

4) UNet. I cannot believe this way taken out of beta when it was. The documentation for it is completely outdated and rarely updated. There are grammar and spelling mistakes everywhere. Even error messages in the game say «netwrok» and «broadbast». Random error messages pop up like «error with network message ID 36» with no indication with how to fix it or what it means…and thats with the supposedly easy to use HLAPI. Also the fact that it was designed with the assumption that people would not want client authority on any actions for multiplayer games, only to have the functionality slowly layered back in.

5) Unity doesn’t seem to follow their own best practices. I mean, even in the title of this blog post, there is a SendMessage call….

When trying to find a source of a huge amount of memory being allocated per frame I got to the point where it had to be in Unity itself.

If you look into the new Networking DLL, you can see that most things that you do with sending/receiving networking messages make you use an implicit GetComponent. If you are syncing the transform of an object, it does this every frame. This is UNACCEPTABLE. If you use their own NetworkTransform component, you can’t even interpolate a transform without a rigidbody, something stupid and not even in the documentation.

6) Broken serialization. If I create a prefab using scripts, create a DLL using those same scripts, dlete the scripts, and then import the DLL, the prefab should be able to relink into the scripts that are now in the DLL. It is absurd that every prefab keeps all of its serialized data, but has no way of knowing what type of scripts are attached? Why not just serialize the class name? There are many issues like this that cause uneeded development time creating more pipeline/toolchain than necessary.

7) PlasticSCM integration checkins fail if there is a merge that needs to happen. After the merge is resolved, you still cannot checkin using the unity GUI, you must use the plastic scm app. I had the Unity GUI plastic integration and the plastic GUI itself get out of sync on an artists project really bad once that only resolved itself with deleting some of his art from the project.

8) The fact that things only get fixed if people take over blog posts like this that are pointless and point out that not everything is roses with Unity right now, and lots of veteran Unity developers are annoyed at the state of the engine and what takes priority in the company.

Instead of asking me for specific bug tickets, why not hire some developers to develop a game internally and see what issues you run into with the engine. Have people internally writing bugs themselves. You should be checking your own work, not leaving it up to the community that relies on your technology for a living.

I do not have time to write bug tickets all day, because I am having to write workarounds for the core problems of Unity that no one there seems to want to fix, because they are allowed to work on whatever they want instead of working on the issues that have plagued the engine and have only gotten worse with each update.

This is just a start. Maybe if you work on these, Unity, we can continue our relationship and I will stop looking elsewhere for a new engine to love.

John hit the nail on the head. It isn’t one issue, it’s a ton and Unity isn’t doing anything to make things better. They just making it worse by adding new features that don’t even work and building upon crap legacy code that is already broken. Filing bug reports is pointless as they don’t get fixed.

Serialization needs a major overhaul, it’s the root of so many problems internally of Unity and from a Unity developer’s perspective. I don’t see this being addressed as the mentality is «let’s pile more shit on it and say it is amazing and revolutionary». Even Unity employees have complained about how bad the code base is.

Doing anything in Unity from development to shipping is becoming more difficult each release. You are at 5.3.2 and 5.x is still at a point it never should been out the door. I’m sure 6.x will be announced near the end of the year/beginning of next as the next big thing in game development.

The only people who are going to want to use Unity are the new developers that don’t know any better.

You are right about the Unity Multiplayer docs. We have a Tech Writer working on overhauling this right now.

I will make sure the UX team know about the error message typo issues.

void OnSanValentine()
string message = "Loving You Unity!";
string[] words = message.Split(' ');
for(int i = 0; i < words.Length ; i++ )
Debug.Log(words[i] + " <3");

If you really loved us, you would fix the ten billion bugs you keep adding with every release. Every release is buggier than the last. Redo the serialization that is holding back the highest suggested features from actually being delivered and causing endless performance and development problems.

Pay the license fees to Xamarin or whatever you need to do so we are not using ancient version of .net. Most third party libs do not support .net 3.5 and require major rewrites to get something outside of Unity to work in Unity unless it is very simple.

Have a real benefit for Pro users who shelled out $4,500 per user (far more expensive than Unreal, especially with multiple developers) other than just holding custom splash screen hostage.

Since Unity is hemorrhaging good employees, I know it is difficult, but if you really loved us you would find a way.

It needs to be said cause Unity is falling apart but the PR bs train is running full steam ahead. 5.x isn’t even stable yet and they will be shoving 6.x down our throats in no time minus owned licenses as that is going away in 6.

In the end it won’t matter cause they will keep handing out and drinking kool aid.

Would be 20% cooler if instead of a video it was an actual WebGL animation. It’s not like Unity can’t do this… Or?..

void Update() {
Ray amourArrow = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit loveHit;
if (Physics.Raycast(amourArrow, -Vector3.up, out loveHit))
if( == «Unity3D»)
loveHit.transform.AddComponent(«Kiss») as Kiss;

if (Physics.Raycast(amourArrow, out loveHit, 100))
if ( == «Unity3D»)

Comments are closed.