Unity3D研究院之自动计算所有子对象包围盒(六)
转自:http://www.xuanyusong.com/archives/3461
如下图所示,拖入不同的mesh在一个节点下面,自动生成一个BoxCollider包围盒。这个功能可以方便关卡策划,不然手动设置BoxCollider太蛋疼了。。
先选择一个父节点,然后执行下面脚本。。 或者也可以根据需求在关卡编辑器上做成自动的。。
C#
[MenuItem("MyMenu/Do Test")]
staticvoidTest()
{
Transform parent=Selection.activeGameObject.transform;
Vector3 postion=parent.position;
Quaternion rotation=parent.rotation;
Vector3 scale=parent.localScale;
parent.position=Vector3.zero;
parent.rotation=Quaternion.Euler(Vector3.zero);
parent.localScale=Vector3.one;
Collider[]colliders=parent.GetComponentsInChildren();
foreach(Collider child incolliders){
DestroyImmediate(child);
}
Vector3 center=Vector3.zero;
Renderer[]renders=parent.GetComponentsInChildren();
foreach(Renderer child inrenders){
center+=child.bounds.center;
}
center/=parent.GetComponentsInChildren().Length;
Bounds bounds=newBounds(center,Vector3.zero);
foreach(Renderer child inrenders){
bounds.Encapsulate(child.bounds);
}
BoxCollider boxCollider=parent.gameObject.AddComponent();
boxCollider.center=bounds.center-parent.position;
boxCollider.size=bounds.size;
parent.position=postion;
parent.rotation=rotation;
parent.localScale=scale;
}
避免子节点中有残留的Collider,生成前先把所有子节点的Collider删除。
参考文章 http://stackoverflow.com/questions/11949463/how-to-get-size-of-parent-game-object
【Unity3D研究院之自动计算所有子对象包围盒(六)】本文固定链接: http://www.xuanyusong.com/archives/3461
转载请注明: 雨松MOMO2015年05月05日 于 雨松MOMO程序研究院 发表
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 太平之莲
- 闲杂“细雨”
- 七年之痒之后
- 深入理解Go之generate
- 由浅入深理解AOP
- 期刊|期刊 | 国内核心期刊之(北大核心)
- 生活随笔|好天气下的意外之喜
- 感恩之旅第75天
- python学习之|python学习之 实现QQ自动发送消息