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); // 得到的包围盒会包含原点