☑️

エディタ編集中にInstantiateする際にPrefabの参照を維持する関数

2023/07/13に公開

実行時は通常の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