当前位置:   article > 正文

Unity的Bound.Encapsulate函数介绍_bounds.encapsulate

bounds.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);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

如下图所示,对于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); // 得到的包围盒会包含原点
  • 1
  • 2
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号