2018.3以降では、NestedPrefab対応でPrefabUtilityが変わっていて、
色々調べたのでPrefabUtilityの使い方のメモとして残しておこうと思います。
#スクリプトからPrefab作成
EditorスクリプトでFBXデータからそのままPrefabを作成する。
2018.2以前はこれでプレファブ作成できた。
old.cs
var obj = AssetDatabase.LoadAssetAtPath("Assets/fbx.fbx", typeof(GameObject)) as GameObject;
PrefabUtility.CreatePrefab("Assets/prefab.prefab",obj);
AssetDatabase.SaveAssets();
ところが、2018.3以降は「PrefabUtility.CreatePrefab()」が非推奨になっていた。
いつなくなるかわからないので、この際新しい書き方に切り替えてみようと思う。
色々試した結果、以下のコードでいけるようだ
new.cs
{
var obj = AssetDatabase.LoadAssetAtPath("Assets/fbx.fbx", typeof(GameObject)) as GameObject;
// インスタンス化
var game = PrefabUtility.InstantiatePrefab(obj) as GameObject;
// 〜 処理 〜
// プレファブ作成
var prefab = PrefabUtility.SaveAsPrefabAsset(game, "Assets/prefab.prefab");
// リンクを解除
PrefabUtility.UnpackPrefabInstance(game, PrefabUnpackMode.OutermostRoot, InteractionMode.AutomatedAction);
// シーンから削除
Object.DestroyImmediate(game);
AssetDatabase.SaveAssets();
}
以前はシーンにインスタンスを作成しなくてもできたが、今回からは一度シーンに作成しないとダメのようなので
最後にシーンから削除するようにした。
ちなみに、リンクについてはあんまりわかっていない。。即反映されるわけでもなさそうだし。。
リンクについては今後調べていこうと思います。
なお、リンクなしでインスタンス化するメソッドもある模様?(インスタンス化時にCloneとつく)
.cs
var game = PrefabUtility.InstantiateAttachedAsset(obj) as GameObject;