UnityEditorスクリプトからPrefabを操作する方法です。Unity2018.3以降の新Prefabワークフローに対応した内容となっています。Unity2018.2以前はこちらの記事を参照してください。参考サイトUnity2018.3.1f1※本記事のスクリプトはすべてUnityEditorをusingしていますPrefabをインスタンス化するPrefabインスタンスをシーンに配置します。Prefabのインスタンスをシーンに配置するPrefabUtility.InstantiatePrefab(assetComponentOrGameObject);GameObject.Instantiate()を使うとUnpackされた状態でインスタンス化されます。Unpackされた状態のインスタンスがシーンに置かれるGameObject.Instantiate(prefab);Prefabを生成/上書きする・Variantを作るPrefabを生成/上書きするには次のようにします。assetPath);コメントに書いた通り、この関数は少し挙動が複雑です。Prefabが生成されていない場合には新規生成されます。次に、既にPrefabが存在しているパスを引数に渡すとPrefabを上書きします。Variantが作られます。上記の関数ではgameObjectがPrefabと関連付きません。Prefabを作ってさらに関連付けるためにはSaveAsPrefabAssetAndConnect()を使います。InteractionMode.AutomatedAction);最後の引数をInteractionMode.UserActionにするとUndoが効くようになります。ユーザが何かのボタンを押すことでPrefabが作れるようなスクリプトの場合にはこっちを使ったほうがよさそうです。Prefabを編集して上書き保存するPrefabを編集して保存するにはPrefabを今のシーンにインスタンス化してもいいのですが、PrefabUtility.LoadPrefabContents()を使ったほうがスマートです。このメソッドはPrefabを内部的なシーン上にロードします。使い方はこんな感じです。Unloadをお忘れなく。prefabPath);PrefabUtility.UnloadPrefabContents(contentsRoot);これに関しては以下の記事にも詳しくまとめています。light11.hatenadiary.comUnpackしてインスタンスとPrefabとの接続を切るUnpackしてインスタンスとPrefabとの接続を切ります。InteractionMode.AutomatedAction);第二引数をPrefabUnpackMode.OutermostRootにするとNestedしている場合に最も近いPrefabとの接続を切ります。PrefabUnpackMode.CompletelyにするとNestedしているすべてのPrefabとの接続を切ります。Prefab生成時と同様に最後の引数をInteractionMode.UserActionにするとUndoが効くようになります。Apply系の操作を行うメソッド一覧Apply系の操作を行うメソッドの一覧です。インスタンスで削除されたコンポーネントをPrefabに反映するRevert系の操作を行うメソッド一覧Revert系の操作を行うメソッドの一覧です。インスタンスで削除されたコンポーネントを元に戻すインスタンスから対応するPrefabを探すインスタンスの持つコンポーネントやGameObjectから、そのPrefabの中の対応するコンポーネントやGameObjectを取得できます。PrefabUtility.GetCorrespondingObjectFromOriginalSource(componentOrGameObject);似たメソッドにPrefabUtility.GetCorrespondingObjectFromSource()があります。こちらは一度Prefabと再接続を行うときに使うとのことです(理解できてない)。docs.unity3d.comインスタンスの一部からインスタンスのルートのGameObjectを得るインスタンスの持つコンポーネントやGameObjectから、インスタンスのルートにあるGameObjectを取得します。PrefabUtility.GetOutermostPrefabInstanceRoot()を使うと、一番外側のルートGameObjectを取得します。入れ子になっていた場合には一番親のルートGameObjectが返されます。PrefabUtility.GetOutermostPrefabInstanceRoot(componentOrGameObject);PrefabUtility.GetOutermostPrefabInstanceRoot()を使うと、一番近くのルートGameObjectを取得します。入れ子になっていた場合には子のルートGameObjectが返されます。PrefabUtility.GetNearestPrefabInstanceRoot(componentOrGameObject);Prefabモードで開くPrefabをPrefabモードで開くにはAssetDatabase.OpenAsset()を使います。AssetDatabase.OpenAsset(prefab);関連light11.hatenadiary.comlight11.hatenadiary.comlight11.hatenadiary.com参考サイトとりあえず使いそうなものだけまとめたので全貌はスクリプトリファレンスをご覧ください。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。