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");
}
}
【Unity3D】统一对场景所有的mesh加碰撞体组件
最新推荐文章于 2024-09-28 07:45:00 发布
该博客介绍了一个Unity EditorWindow脚本,用于在Unity编辑器中批量为Hierarchy面板下的所有MeshRenderer组件添加MeshCollider。通过记录并应用Undo操作,确保了编辑器能够检测到变化,并在保存场景时包含这些更改。脚本还包括了强制刷新以更新Unity界面显示。
摘要由CSDN通过智能技术生成