プレハブのためのユーティリティクラスの関連操作。
//Create a folder (right click in the Assets directory, click Create>New Folder) and name it “Editor” if one doesn’t exist already. //Place this script in that folder
//This script creates a new menu and a new menu item in the Editor window // Use the new menu item to create a prefab at the given path. If a prefab already exists it asks if you want to replace it //Click on a GameObject in your Hierarchy, then go to Examples>Create Prefab to see it in action.
using UnityEngine; using UnityEditor;
public class Example : EditorWindow { //Creates a new menu (Examples) with a menu item (Create Prefab) [MenuItem("Examples/Create Prefab")] static void CreatePrefab() { //Keep track of the currently selected GameObject(s) GameObject[] objectArray = Selection.gameObjects;
//Loop through every GameObject in the array above foreach (GameObject gameObject in objectArray) { //Set the path as within the Assets folder, and name it as the GameObject's name with the .prefab format string localPath = "Assets/" + gameObject.name + ".prefab";
//Check if the Prefab and/or name already exists at the path if (AssetDatabase.LoadAssetAtPath(localPath, typeof(GameObject))) { //Create dialog to ask if User is sure they want to overwrite existing prefab if (EditorUtility.DisplayDialog("Are you sure?", "The prefab already exists. Do you want to overwrite it?", "Yes", "No")) //If the user presses the yes button, create the Prefab { CreateNew(gameObject, localPath); } } //If the name doesn't exist, create the new Prefab else { Debug.Log(gameObject.name + " is not a prefab, will convert"); CreateNew(gameObject, localPath); } } }
// Disable the menu item if no selection is in place [MenuItem("Examples/Create Prefab", true)] static bool ValidateCreatePrefab() { return Selection.activeGameObject != null; }
static void CreateNew(GameObject obj, string localPath) { //Create a new prefab at the path given Object prefab = PrefabUtility.CreatePrefab(localPath, obj); PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab); } }
prefabInstanceUpdated | シーンのプレハブのインスタンスが更新された後に呼び出します |
ConnectGameObjectToPrefab | ソースプレハブにゲームオブジェクトを接続します |
CreateEmptyPrefab | 指定されたパスに空のプレハブを作成します |
CreatePrefab | ゲームオブジェクトのヒエラルキーからプレハブを作成します |
DisconnectPrefabInstance | プレハブのインスタンスを親プレハブから切断します |
FindPrefabRoot | ヘルパー関数は(ピッキングに使用した)オブジェクトのプレハブルートを検索します |
FindRootGameObjectWithSameParentPrefab | target と同じプレハブ親を持つ最上位のゲームオブジェクトを返します |
FindValidUploadPrefabInstanceRoot | そのルートプレハブインスタンスがプレハブの親である場合は、プレハブインスタンスのルートゲームオブジェクトを返します |
GetPrefabObject | 内部に含む任意のオブジェクトを包括するプレハブを取得します |
GetPrefabParent | ソースの親アセットオブジェクトを返し、見つからない場合は null を返します |
GetPrefabType | オブジェクトが与えらると、そのプレハブの type を返します(プレハブでない場合は何も返しません) |
GetPropertyModifications | 親プレハブと比較して、指定したプレハブのインスタンスに適用されたすべての修正を抽出します |
InstantiateAttachedAsset | プレハブによって参照されているアセットをインスタンス化し、プレハブのインスタンスで使用します |
InstantiatePrefab | 指定したシーン内に指定したプレハブをインスタンス化します |
MergeAllPrefabInstances | このプレハブのすべてのプレハブのインスタンスを強制的に再マージします |
ReconnectToLastPrefab | 最後に接続されたプレハブにゲームオブジェクトを接続します |
RecordPrefabInstancePropertyModifications | Causes modifications made to the Prefab instance to be recorded. |
ReplacePrefab | ゲームオブジェクトのヒエラルキーにある go のコピーと targetPrefab を置き換えます |
ResetToPrefabState | コンポーネントやゲームオブジェクトのプロパティーを親プレハブの状態にリセットします |
RevertPrefabInstance | プレハブのインスタンスに追加された子ゲームオブジェクトとコンポーネントを含プレハブ内のすべてのオブジェクトのプロパティーをリセットします |
SetPropertyModifications | 親プレハブと比較し、プレハブのインスタンスに適用されるすべての修正を適用します |
PrefabInstanceUpdated | シーンが更新された際、プレハブのインスタンス後に呼び出されるメソッドをデリゲート |