コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】プレハブの編集が簡単になる PrefabUtility.EditPrefabContentsScope

通常

[MenuItem( "Tools/Hoge" )]
private static void Hoge()
{
    var assetPath  = "";
    var prefabRoot = PrefabUtility.LoadPrefabContents( assetPath );

    foreach ( var x in prefabRoot.GetComponentsInChildren<SpriteRenderer>() )
    {
        Object.DestroyImmediate( x );
    }

    PrefabUtility.SaveAsPrefabAsset( prefabRoot, assetPath );
    PrefabUtility.UnloadPrefabContents( prefabRoot );
}

PrefabUtility.EditPrefabContentsScope

[MenuItem( "Tools/Hoge" )]
private static void Hoge()
{
    var       assetPath    = "";
    using var editingScope = new PrefabUtility.EditPrefabContentsScope( assetPath );
    var       prefabRoot   = editingScope.prefabContentsRoot;

    foreach ( var x in prefabRoot.GetComponentsInChildren<SpriteRenderer>() )
    {
        Object.DestroyImmediate( x );
    }
}