Unity的Bound.Encapsulate函数介绍

Unity对该API的介绍简单的令人发指:
在这里插入图片描述
主要疑问在于,当Bound扩大时,是以怎么样的扩大方式,其中心点center的坐标变不变,现在只能做个试验了。

在Unity的Scene场景中放置两个尺寸为单位长度的cube,第一个cube中心点为世界原点,第二个cube中心点为(2,0,0),然后执行下面一段代码:

public class TestBounds : MonoBehaviour
{
    public GameObject cube1;// 位置在0,0,0
    public GameObject cube2;// 位置在2,0,0
    Bounds bound1;
    Bounds bound2;
    void Start()
    {
        bound1 = cube1.GetComponent<BoxCollider>().bounds;
        bound2 = cube2.GetComponent<BoxCollider>().bounds;
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {
            Debug.Log("原来的bound" + bound1);
            bound1.Encapsulate(bound2);// 用cube1的bounds拓展,去包含cube2的bounds
            Debug.Log("后来的bound" + bound1);
        }
    }
}

如下图所示,对于bound1而言,原本的bound1为图中的红色方框,中心点为红色点,bound1.Encapsulate(bound2)执行后,bound1变为绿色的方框,中心点为绿色点,所以最后发现其中心点坐标变了,由红色点改为了绿色点:
在这里插入图片描述
上面的bound1.Encapsulate(bound2),实际上等同于bound1.Encapsulate(new Vector3(2.5f,0,0))


最后注意一个很重要的事情,默认创建的Bounds的center为世界坐标系的原点,其extents为Vector3.zero
比如下面的代码,会产生一个既包含原点,也包含Bound2的包围盒,所以要注意Bounds的初始化,可能会影响预期的结果:

bound1 = new Bounds();
bound1.Encapsulate(bound2); // 得到的包围盒会包含原点
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值