Unity Sceneとプレハブとgit管理の関係について

今回は、UnityのSceneとプレハブとgit管理の関係について調査する。

  1. Untitled1.unityとUntitled2.unityで、同じプレハブを利用する。
  2. Untitled1.unityでプレハブを変更しapplyを実行する
  3. Untitled1.unityを保存
  4. Untitled2.unityに移動して保存
  5. その後、gitで状態を見る

f:id:yasuaki-ohama:20150527135924p:plain

プレハブにアタッチするコード

using UnityEngine;
using System.Collections;

public class Sample : MonoBehaviour {

	public bool testFlage;
	public int test2;
	public int[] testArray;
}

テスト
f:id:yasuaki-ohama:20150527141130p:plain
Untitled1のTest Flageにチェックを入れてapplyして保存
Untitled2を開いて保存して閉じる

gitの状態

➜  SceneTest git:(master) ✗ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   Assets/Prefabs/GameObject.prefab
	modified:   Assets/Scenes/Untitled1.unity
	modified:   Assets/Scenes/Untitled2.unity

結果、考察

Hierarchy上に配置してあるオブジェクトを変更するだけでシーンが書き換わってしまう。
UIなどのプレハブを全てのシーン上に配置した場合、
applayを行うと全てのシーンが書き換わってしまう。


プレハブを更新してもシーンの差分が残らないようにするためには、スクリプト内からプレハブを作成するようにしなければならない。
元々、Hierarchy上になければ差分はでないのだから