Unity編譯器之快捷新增碰撞器,和移除碰撞器(運用遞迴)
在實際做專案中,有時候經常需要對地形的碰撞體進行編輯,比如很多不需要加碰撞體的物件卻帶著碰撞體,如果手動去移除,工作量又是很大(經常子物體又是套著子物體,十分複雜),有時候又需要新增碰撞體,本人就移除碰撞體這件事件花了很長時間,不勝其煩,網上的資料也不是太多,也不全。所以在這給大家貼出流程與程式碼。可以使開發更加方便。
- 新建一個名為Editor的資料夾,在這個資料夾下新建一個指令碼EditorTest
- 開啟指令碼,引入using UnityEditor;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
public class EditorTest : MonoBehaviour
{
[MenuItem("AddRemoveCompentEditor/RemoveCompent")]
public static void RemoveCompent()
{
GameObject[] goArray = GameObject.FindGameObjectsWithTag("Test");
foreach (var item in goArray)
{
RemoveTest(item);
}
Debug.Log("移除成功");
}
[MenuItem("AddRemoveCompentEditor/AddCompent")]
public static void AddCompent()
{
GameObject[] goArray = GameObject.FindGameObjectsWithTag("Test");
foreach (var item in goArray)
{
AddTest(item);
}
Debug.Log("新增成功");
}
static void RemoveTest(GameObject go)
{
if (go.GetComponent<Collider>() != null)
{
foreach (var item in go.GetComponents<Collider>())
{
DestroyImmediate(item);
}
}
for (int i = 0; i < go.transform.childCount; i++)
{
RemoveTest(go.transform.GetChild(i).gameObject);
}
}
static void AddTest(GameObject go)
{
if (go.GetComponent<Collider>() == null)
{
go.AddComponent<BoxCollider>();
}
for (int i = 0; i < go.transform.childCount; i++)
{
AddTest(go.transform.GetChild(i).gameObject);
}
}
}