赞
踩
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); // 得到的包围盒会包含原点
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。