Unity 如何让BoxCollider自适配大小
【摘要】
上图例为一艘货运船上装载了若干个危险品模型,它们有一个空父级,给该父级物体添加BoxCollider碰撞盒时其Size默认大小为1, 如何给父物体添加BoxCollider碰撞盒时使其Size大小自适配包含所有子物体模型,而不是手动去调整该BoxCollider大小?
包围盒Bounds类为我们提供了解决办法,下面编写小...
上图例为一艘货运船上装载了若干个危险品模型,它们有一个空父级,给该父级物体添加BoxCollider碰撞盒时其Size默认大小为1, 如何给父物体添加BoxCollider碰撞盒时使其Size大小自适配包含所有子物体模型,而不是手动去调整该BoxCollider大小?
包围盒Bounds类为我们提供了解决办法,下面编写小工具:
using UnityEngine;
using UnityEditor;
public class BoundsTool
{
[MenuItem("SKFramework/Bounds/Auto BoxCollider")]
private static void AutoBoxCollider()
{
//如果未选中任何物体 返回
GameObject gameObject = Selection.activeGameObject;
if (gameObject == null) return;
//计算中心点
Vector3 center = Vector3.zero;
var renders = gameObject.GetComponentsInChildren<Renderer>();
for (int i = 0; i < renders.Length; i++)
{
center += renders[i].bounds.center;
}
center /= renders.Length;
//创建边界盒
Bounds bounds = new Bounds(center, Vector3.zero);
foreach (var render in renders)
{
bounds.Encapsulate(render.bounds);
}
//先判断当前是否有碰撞器 进行销毁
var currentCollider = gameObject.GetComponent<Collider>();
if (currentCollider != null) Object.DestroyImmediate(currentCollider);
//添加BoxCollider 设置中心点及大小
var boxCollider = gameObject.AddComponent<BoxCollider>();
boxCollider.center = bounds.center - gameObject.transform.position;
boxCollider.size = bounds.size;
}
}
加入上述工具后,在场景中进行测试,可见添加的BoxCollider已经自动适配大小,包含所有子物体:
文章来源: coderz.blog.csdn.net,作者:CoderZ1010,版权归原作者所有,如需转载,请联系作者。
原文链接:coderz.blog.csdn.net/article/details/121265522
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)