Unity Scene Diff Tool

Greetings fellow Unity developers,

As you may have come across, text diffing and merging Unity scenes is not so easy.  Having a Unity scene be diff-able and merge-able is necessary for multiple team members to be able to edit it at the same time without losing changes.  Most teams either deal with this by letting only team team member at a time edit the scene file, or by buying Unity Pro ($1500).

Even with Edit->Project Settings->Editor->Asset Serialization set to “Force Text”, here’s the type of diff you can expect after changing a single value in your Unity scene.  The scrollbar shows how long the text is!:


Some solutions to this have been made, and sold on the Unity Asset Store.  My team tried two of these solutions.  However, neither of them just worked out of the box, and they were both extremely clunky.  It would have been more work to get these solutions to work for our team.

So, I figured out how to fix the problem with a simple Python script.  The Unity text file has lots of entities, which look like this:

— !u!196 &5                  <– (THE ENTITY TAG)
  m_ObjectHideFlags: 0
    agentRadius: .5
    agentHeight: 2
    agentSlope: 45
In scenes of moderate to large size, Unity basically randomizes the order in which it saves the entities.  So my Python script just sorts the entities based on their tag name.  Afterward, you get a much simpler diff:


The script was surprisingly easy to write.  Since it’s in Python, it works on both Windows and Mac, which is important since some of our team works on each platform.

Hope this tip works for you!

Aaron Smith
Chief Technical Officer
ZeroPoint Studios


1 thought on “Unity Scene Diff Tool

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s