Unity的Bound.Encapsulate函数介绍

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

放置两个尺寸为单位长度的cube,第一个cube中心点为世界原点,第二个cube中心点为(2,0,0),如下图所示,原来的bound为红色方框,中心点为红色点,代码如下所示,最后发现其中心点坐标变了:

public class TestBounds : MonoBehaviour
{
    public GameObject cube1;
    public GameObject cube2;
    Bounds bound1;
    Bounds bound2;

    // Start is called before the first frame update
    void Start()
    {
        bound1 = cube1.GetComponent<BoxCollider>().bounds;
        bound2 = cube2.GetComponent<BoxCollider>().bounds;
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {
            Debug.Log("原来的bound" + bound1);
            bound1.Encapsulate(bound2);
            Debug.Log("后来的bound" + 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); // 得到的包围盒会包含原点
posted @ 2020-09-14 14:28  弹吉他的小刘鸭  阅读(767)  评论(0编辑  收藏  举报