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 | |||
|  | } |