Prefabモード中にシーンやPrefabの情報を取得する方法です。
Unity2018.3.9
PrefabStage
Unity2018.3からPrefabモードが追加されたのに伴って、PrefabStageという概念が追加されました。
Prefabモード中にこのPrefabStageのインスタンスを取得すると、
編集中のPrefabの情報やシーンの情報などが取れます。
マニュアルは以下にあります。
ちなみにこれらはいずれもExperimentalです。
Prefabワークフローが変わったばかりであることを考えると今後変わる可能性も大きそうなので注意が必要です。
色々操作する
それではこのAPIを使っていろんなものを取得・操作してみます。
using UnityEditor; using UnityEditor.Experimental.SceneManagement; public class PrefabExample { public void Example() { // 開かれているPrefabStageを取得する(開かれていなかったらnull) var stage = PrefabStageUtility.GetCurrentPrefabStage(); // PrefabのAssetPath var assetPath = stage.prefabAssetPath; // Prefabのルートオブジェクト var contentsRoot = stage.prefabContentsRoot; // 引数のGameObjectがPrefabの一部かどうか調べる var targetGameObj = Selection.activeGameObject; stage.IsPartOfPrefabContents(targetGameObj); // シーン var scene = stage.scene; // 変更が加わっているフラグをおろす(保存確認ダイアログが表示されなくなる) stage.ClearDirtiness(); } }
まだinternalなものが多いようでできることは少ないです。今後に期待。