美工提供的模型,有时候子物体过于多,一个一个的添加碰撞体过程太繁琐了,所以,有必要写一个脚本来让场景中的所有MeshRenderer添加上碰撞体组件。
using UnityEngine;
using UnityEditor;
public class AddMeshCollider : EditorWindow
{
[MenuItem("Tools/添加碰撞体")]
public static void Open()
{
EditorWindow.GetWindow(typeof(AddMeshCollider));
}
void OnGUI()
{
if (GUILayout.Button("添加碰撞体"))
{
Add();
}
}
public static void Add()
{
//寻找Hierarchy面板下所有的MeshRenderer
var tArray = Resources.FindObjectsOfTypeAll(typeof(MeshRenderer ));
for (int i = 0; i < tArray.Length; i++)
{
MeshRenderer t = tArray[i] as MeshRenderer;
//这个很重要,博主发现如果没有这个代码,unity是不会察觉到编辑器有改动的,自然设置完后直接切换场景改变是不被保存
//的 如果不加这个代码 在做完更改后 自己随便手动修改下场景里物体的状态 在保存就好了
Undo.RecordObject(t, t.gameObject.name);
t.gameObject.AddComponent<MeshCollider>();
//相当于让他刷新下 不然unity显示界面还不知道自己的东西被换掉了 还会呆呆的显示之前的东西
EditorUtility.SetDirty(t);
}
Debug.Log("Succed");
}
}
希望对你有帮助。
有疑问欢迎vx咨询159-7084-3394