LoginSignup
2
2

More than 3 years have passed since last update.

Unity2018.3以降のPrefab作成

Last updated at Posted at 2019-07-11

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とつく)

  var game = PrefabUtility.InstantiateAttachedAsset(obj) as GameObject;
2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2