53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
using UnityEngine;
|
|
|
|
#if UNITY_EDITOR
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEditor.Experimental.SceneManagement;
|
|
#endif
|
|
|
|
public sealed class PrefabInPrefabSwapper : MonoBehaviour {
|
|
|
|
#if UNITY_EDITOR
|
|
[SerializableAttribute]
|
|
public sealed class SwapInfo {
|
|
[SerializeField]
|
|
private string swapTargetName = default;
|
|
public string SwapTargetName {
|
|
get{ return swapTargetName; }
|
|
}
|
|
[SerializeField]
|
|
private GameObject swapPrefab = default;
|
|
public GameObject SwapPrefab {
|
|
get{ return swapPrefab; }
|
|
}
|
|
}
|
|
|
|
[SerializeField]
|
|
private SwapInfo[] swapInfoArray = new SwapInfo[1];
|
|
|
|
[ContextMenu("SwapPrefab")]
|
|
private void SwapPrefab(){
|
|
foreach(var info in swapInfoArray){
|
|
if(info.SwapTargetName.Length <= 0) continue;
|
|
if(info.SwapPrefab == null) continue;
|
|
|
|
var swapList = new List<Transform>();
|
|
transform.AllChildrens(t => {
|
|
if(t.name.Contains(info.SwapTargetName)){
|
|
swapList.Add(t);
|
|
}
|
|
});
|
|
foreach(var from in swapList){
|
|
var to = (UnityEditor.PrefabUtility.InstantiatePrefab(info.SwapPrefab, PrefabStageUtility.GetCurrentPrefabStage().scene) as GameObject).transform;
|
|
to.parent = from.parent;
|
|
to.localPosition = from.localPosition;
|
|
to.localRotation = from.localRotation;
|
|
to.localScale = from.localScale;
|
|
DestroyImmediate(from.gameObject);
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
}
|