☑️
エディタ編集中にInstantiateする際にPrefabの参照を維持する関数
実行時は通常のInstantiateを行い、エディタ編集中はPrefabの参照を維持したInstantiate(UnityEditor.PrefabUtility.InstantiatePrefab
)を行う。
Prefabじゃないもの(シーンに配置したGameObjectなど)をInstantiateする際は通常のInstantiateを行う。
/// <summary>
/// 再生中ではない時は、プレハブの参照がされたInstantiateを行う。
/// </summary>
public static T InstantiateWithPrefabReference<T>(this T prefab, Transform parent) where T : UnityEngine.Object
{
T obj = null;
#if UNITY_EDITOR
if (!Application.isPlaying)
{
obj = UnityEditor.PrefabUtility.InstantiatePrefab(prefab, parent) as T; // 動くかは未確認
}
if (obj == null)
{
obj = GameObject.Instantiate(prefab, parent);
}
#else
obj = Instantiate(prefab, _root);
#endif
return obj;
}
Discussion