Files
Deroc_Virtual_3D/Assets/FPS/Scripts/Editor/PrefabReplacerEditor.cs
T
Alex38Lyon 878ea46cac update
2025-06-03 12:00:47 +02:00

57 lines
2.1 KiB
C#

using System.Collections.Generic;
using Unity.FPS.Game;
using UnityEngine;
using UnityEditor;
namespace Unity.FPS.EditorExt
{
[CustomEditor(typeof(PrefabReplacer))]
public class PrefabReplacerEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
if (GUILayout.Button("Replace"))
{
Replace((target as PrefabReplacer));
}
}
public void Replace(PrefabReplacer replacer)
{
List<GameObject> allPrefabObjectsInScene = new List<GameObject>();
foreach (Transform t in GameObject.FindObjectsByType<Transform>(FindObjectsInactive.Exclude, FindObjectsSortMode.None))
{
if (PrefabUtility.IsAnyPrefabInstanceRoot(t.gameObject))
{
allPrefabObjectsInScene.Add(t.gameObject);
}
}
foreach (GameObject go in allPrefabObjectsInScene)
{
GameObject instanceSource = PrefabUtility.GetCorrespondingObjectFromSource(go);
foreach (var replacement in replacer.Replacements)
{
GameObject source = replacer.SwitchOrder ? replacement.TargetPrefab : replacement.SourcePrefab;
GameObject target = replacer.SwitchOrder ? replacement.SourcePrefab : replacement.TargetPrefab;
if (instanceSource == source)
{
// Create the instance
GameObject instance = PrefabUtility.InstantiatePrefab(target) as GameObject;
instance.transform.SetParent(go.transform.parent);
instance.transform.position = go.transform.position;
instance.transform.rotation = go.transform.rotation;
instance.transform.localScale = go.transform.localScale;
Undo.RegisterCreatedObjectUndo(instance, "prefab replace");
Undo.DestroyObjectImmediate(go);
}
}
}
}
}
}