Unity incorpora una herramienta llamada UnityYAMLMerge que puede fusionar tanto archivos de escena como prefab en una manera semántica correcta. La herramienta se puede acceder desde la linea de comando y también está disponible a software de terceros de control de versiones.
In the Editor window (menu: Edit > Project Settings, then select the Editor category), you have the option to select a third party version control tool (Perforce or PlasticSCM, for example). When one of these tools is enabled, you will see a Smart Merge menu under the Version Control heading. The menu has four options:
La herramienta UnityYAMLMerge es lanzada con el editor de Unity; asumiendo que Unity está instalado en la ubicación estándar, la ruta a UnityYAMLMerge será:
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
o
C:\Program Files (x86)\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
…en Windows y
/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge
…en Mac OSX (utilice el comando Show Package Contents desde el Finder para acceder a esta carpeta).
UnityYAMLMerge es lanzado con un archivo fallback predeterminado (llamado mergespecfile.txt,también en la carpeta Tools) que específica cómo debería proceder con los conflictos sin resolver o archivos no conocidos. Esto también le permite a usted utilizarlo como la herramienta de fusión principal para sistemas de control de versiones (como lo es git) que no seleccionan automáticamente las herramientas smart merge basadas en las extensiones de los archivos. Las herramientas más comunes ya están listadas por defecto en mergespecfile.txt pero usted puede editar este archivo para agregar nuevas herramientas o cambiar opciones.
Usted puede ejecutar UnityYAMLMerge como la herramienta standalone desde la linea de comando (usted pude ver las instrucciones completas de uso al correrlo sin argumentos). Las instrucciones de configuración para los sistemas de control de versiones comunes se dan abajo:
.unity
.merge -p %b %1 %2 %r
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
Agregue el siguiente texto a su archivo .git
o .gitconfig
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
Agregue el siguiente texto a su archivo .hgrc
:
[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
Agregue lo siguiente a su archivo ~/.subversion/config
:
[helpers]
merge-tool-cmd = <path to UnityYAMLMerge>
.unity
en el campo de extensión. <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
.unity
. <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile" "@destinationfile" "@output"
Luego, siga el mismo procedimiento para agregar una extensión .prefab
.
merge -p $BASE $REMOTE $LOCAL $MERGED
en el campo de texto Arguments.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 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