Use the UnityYAMLMerge tool to merge sceneA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary and prefabAn asset type that allows you to store a GameObject complete with components and properties. The prefab acts as a template from which you can create new object instances in the scene. More info
See in Glossary files in a semantically correct way. The tool can be accessed from the command line and is also available to third-party version controlA system for managing file changes. You can use Unity in conjunction with most common version control tools, including Perforce, Git, Mercurial and PlasticSCM. More info
See in Glossary software.
In the Version Control project settings (menu: Edit > Project Settings > Version Control), when you select a third-party version control tool in the Mode field, for example Perforce or PlasticSCM, the Smart Merge is displayed. The menu has the following options:
The UnityYAMLMerge tool is shipped with the Unity editor; assuming Unity is installed in the standard location, the path to UnityYAMLMerge will be:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe or C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
…on Windows and
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
…on Mac OSX (use the Show Package Contents command from the Finder to access this folder).
UnityYAMLMerge is shipped with a default fallback file (called mergespecfile.txt, also in the Tools folder) that specifies how it should proceed with unresolved conflicts or unknown files. This also allows you to use it as the main merge tool for version control systems (such as git) that don’t automatically select merge tools based on file extensions. The most common tools are already listed by default in mergespecfile.txt but you can edit this file to add new tools or change options.
You can run UnityYAMLMerge as a standalone tool from the command line (you can see full usage instructions by running it without any arguments). Setup instructions for common version control systems are given below.
.unity
.merge -p %b %1 %2 %r
Then, follow the same procedure to add the .prefab
extension.
Add the following text to your .git
or .gitconfig
file:
[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
Add the following text to your .hgrc
file:
[merge-patterns] **.unity = unityyamlmerge **.prefab = unityyamlmerge [merge-tools] unityyamlmerge.executable = <path to UnityYAMLMerge> unityyamlmerge.args = merge -p --force $base $other $local $output unityyamlmerge.checkprompt = True unityyamlmerge.premerge = False unityyamlmerge.binary = False
Add the following to your ~/.subversion/config
file:
[helpers] merge-tool-cmd = <path to UnityYAMLMerge>
.unity
in the extension field.<path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
Then, follow the same procedure to add the .prefab
extension.
.unity
extension.<path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile" "@destinationfile" "@output"
Then, follow the same procedure to add the .prefab
extension.
merge -p $BASE $REMOTE $LOCAL $MERGED
in the Arguments field.To customize how UnityYAMLMerge merges files, configure the mergerules.txt file. This is available in the Editor/Data/Tools
folder of your Unity installation.
The various configuration options are as follows.
The arrays configuration section tells UnityYAMLMerge to treat the specified path as an array; either as a “set” with a key value, or as a “plain” array without key values. The default for all arrays is to do a hybrid mode and try to match with some known heuristics.
[arrays] set *.GameObject.m_Component *.fileID set *.Prefab.m_Modification.m_Modifications target.fileID target.guid propertyPath plain *.MeshRenderer.m_Materials plain *.Renderer.m_Materials
The exclusions configuration section indicates which paths to exclude from merging. If both sides have been modified, they are then treated as a conflict and will show up for user input.
[exclusions] exclude *.MeshRenderer.m_Materials.* exclude *.SpriteRenderer.m_Materials exclude *.SpriteRenderer.m_Color include *.ParticleSystem.InitialModule exclude *.ParticleSystem.* exclude *.ParticleSystem.InitialModule.* #excludeDepend *.MonoBehaviour m_Script ^m_ excludeIfContains *.MonoBehaviour.* x y z excludeIfContains *.MonoBehaviour.* r g b
The --nomappinginoneline
argument is similar to the EditorSettings.serializeInlineMappingsOnOneLine
API in Unity.
To disable single-line format, include this argument when you run the merge tool. When the --nomappinginoneline
option is active, the tool attempts to split YAML data across multiple lines whenever a line exceeds 80 characters.
This argument helps to maintain consistency between the Unity generated file and the mergetool generated file.
The comparisons section takes into account negligible differences between float values to ignore per user settings. When enabled, floating point comparison is done relatively to account for relative error. You can configure comparison in the following ways:
The relative comparison value determines epsilon and how comparison will scale with the size of the floats’ relative error. The absolute comparison cutoff determines at which point float comparison switches from absolute to relative from zero (on a graph).
Note: Comparison values should be between float epsilon (~0.00000011921) and 1.0
[comparisons] float *.Transform.m_LocalPosition.x 0.0000005 float *.Transform.m_LocalPosition.y 0.0000005 float *.Transform.m_LocalPosition.z 0.0000005 float *.Transform.m_LocalRotation.x 0.00005 0.001 float *.Transform.m_LocalRotation.y float *.Transform.m_LocalRotation.z 0.00005 0.001 float *.Transform.m_LocalRotation.w
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.
When you visit any website, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalized web experience. Because we respect your right to privacy, you can choose not to allow some types of cookies. Click on the different category headings to find out more and change our default settings. However, blocking some types of cookies may impact your experience of the site and the services we are able to offer.
More information
These cookies enable the website to provide enhanced functionality and personalisation. They may be set by us or by third party providers whose services we have added to our pages. If you do not allow these cookies then some or all of these services may not function properly.
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and therefore anonymous. If you do not allow these cookies we will not know when you have visited our site, and will not be able to monitor its performance.
These cookies may be set through our site by our advertising partners. They may be used by those companies to build a profile of your interests and show you relevant adverts on other sites. They do not store directly personal information, but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will experience less targeted advertising. Some 3rd party video providers do not allow video views without targeting cookies. If you are experiencing difficulty viewing a video, you will need to set your cookie preferences for targeting to yes if you wish to view videos from these providers. Unity does not control this.
These cookies are necessary for the website to function and cannot be switched off in our systems. They are usually only set in response to actions made by you which amount to a request for services, such as setting your privacy preferences, logging in or filling in forms. You can set your browser to block or alert you about these cookies, but some parts of the site will not then work. These cookies do not store any personally identifiable information.