Last active
February 21, 2020 04:57
-
-
Save TsubameUnity/555c0af5f10557d8399d7d0d82a5f99a to your computer and use it in GitHub Desktop.
Prefabに付けておくと、ランタイム時にシーン変更・ゲーム終了時に自動でPrefabを更新する機能
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
public class RuntimePrefabUpdate : MonoBehaviour | |
{ | |
#if UNITY_EDITOR | |
UnityEngine.SceneManagement.Scene scene; | |
void Start() | |
{ | |
scene = gameObject.scene; | |
UnityEngine.SceneManagement.SceneManager.sceneUnloaded += OnSceneUnloaded; | |
DontDestroyOnLoad(gameObject); | |
} | |
void OnDestroy() | |
{ | |
UnityEngine.SceneManagement.SceneManager.sceneUnloaded -= OnSceneUnloaded; | |
} | |
void OnApplicationQuit() | |
{ | |
PrefabUpdate(); | |
} | |
void OnSceneUnloaded(UnityEngine.SceneManagement.Scene scene) | |
{ | |
// 所属シーンが消された | |
if (this.scene == scene) | |
{ | |
// 特定タイミングだと正常にPrefabが更新されないので、delayCallで処理を遅延 | |
UnityEditor.EditorApplication.delayCall += () => | |
{ | |
// 何かしらのシーンに配置されていないとプレハブが正常に保存できないので、仮シーンを制作 | |
var previewScene = UnityEditor.SceneManagement.EditorSceneManager.NewPreviewScene(); | |
transform.SetParent(null); | |
// DontDestroyOnLoadを指定すると所属シーンが空になり、HideFlagsがDontSaveInEditorになるので | |
// 保存できるようにデータを修正 | |
gameObject.hideFlags = HideFlags.None; | |
UnityEngine.SceneManagement.SceneManager.MoveGameObjectToScene(gameObject, previewScene); | |
PrefabUpdate(); | |
UnityEditor.SceneManagement.EditorSceneManager.ClosePreviewScene(previewScene); | |
}; | |
} | |
} | |
// Prefabに変更を適用する | |
void PrefabUpdate() | |
{ | |
var prefab = UnityEditor.PrefabUtility.GetPrefabParent(gameObject); | |
UnityEditor.PrefabUtility.ReplacePrefab(gameObject, prefab, UnityEditor.ReplacePrefabOptions.ConnectToPrefab); | |
Debug.Log(prefab.name + ": Prefabs Saved. "); | |
} | |
#endif | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment