一段簡單的 script 可以選取在 sceneview 中的的 GameObject 然後用其他 GameObject 取代它們原有的位置,角度,大小等等.
在場景有大量相同的東西需要轉換時的小工具.
using UnityEngine;
using UnityEditor;
using System.Collections;
public class SearchAndReplace : ScriptableWizard
{
public GameObject prefab;
public GameObject[] OldObjects;
[Header("Options")]
public bool copyParentTransform = true;
public bool copyPosition = true;
public bool copyRotation = true;
public bool copyScale = true;
[MenuItem("Kit/Replace GameObjects")]
static void CreateWizard()
{
ScriptableWizard.DisplayWizard("Replace GameObjects", typeof(SearchAndReplace), "Replace");
}
void OnWizardCreate()
{
int undoIdx = Undo.GetCurrentGroup();
foreach (GameObject go in OldObjects)
{
GameObject newObject;
if (prefab.transform.root == null)
newObject = (GameObject)PrefabUtility.InstantiatePrefab(prefab); // prefab
else
newObject = Instantiate(prefab); // scene object
Undo.RegisterCreatedObjectUndo(newObject, "NewObject");
if (copyParentTransform) newObject.transform.SetParent(go.transform.parent);
if (copyPosition) newObject.transform.position = go.transform.position;
if (copyRotation) newObject.transform.rotation = go.transform.rotation;
if (copyScale) newObject.transform.localScale = go.transform.localScale;
Undo.RecordObject(newObject, "NewObjectParams");
Undo.DestroyObjectImmediate(go);
}
Undo.CollapseUndoOperations(undoIdx);
}
}