关闭

Unity Bound

标签: UnityBound
1178人阅读 评论(0) 收藏 举报

Bound:包围盒,边界框,AABB的简称,Mesh,Collider,Renderer都存在bound。(Mesh返回的是自身坐标,其余返回的是世界坐标)。


using UnityEngine;
using System.Collections;
using System.Xml;

public class TestXml : MonoBehaviour {

    public GameObject Target;

    public GameObject Target2;

    Bounds bounds;

    void Start()
    {
        bounds = Target.GetComponent<BoxCollider>().bounds;

        Debug.Log("center:" + bounds.center);//中点
        Debug.Log("Size:" + bounds.size);//bound的大小,等于extents*2
        Debug.Log("Min:" + bounds.min);//bound上最小的点,总是等于center-extents
        Debug.Log("Max:" + bounds.max);//bound上最大的点,总是等于center+extents
        Debug.Log("extents:" + bounds.extents);//圣典上翻译成广度,笔者也不清楚如何理解,它等于size/2

        //传入一个点,找离bounds最近的点,如果点在bounds上,则返回输入的点
        Debug.Log(bounds.ClosestPoint(bounds.center));
        Debug.Log(bounds.ClosestPoint(bounds.min));
        Debug.Log(bounds.ClosestPoint(Vector3.zero));

        //判断点是否在bounds上
        Debug.Log(bounds.Contains(bounds.center));
        Debug.Log(bounds.Contains(bounds.min));
        Debug.Log(bounds.Contains(Vector3.zero));

        Bounds temp = new Bounds(Vector3.zero, Vector3.one * 3);

        bounds.Encapsulate(Vector3.one);//使bound包含这个点

        bounds.Encapsulate(temp);//使bound包含参数bound

        bounds.Expand(Vector3.one * 2);//扩大包围盒

        bounds.SetMinMax(Vector3.zero, Vector3.zero);//设置最大最小点,且比单独设置min,max效率要高

        Debug.Log(bounds.Intersects(temp));//是否与参数包围盒相交

        Debug.Log(bounds.SqrDistance(Vector3.up * 2));//返回一个参数点与bound最近的距离平方;
    }

    bool DetectHit(Ray ray)
    {   
       //判断射线是否在bound上
        return bounds.IntersectRay(ray);
    }

    void Update()
    {
        if (Input.GetMouseButtonDown(0)) {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (DetectHit(ray))
            {
                Debug.Log("点中包围盒");
            }
            else {
                Debug.Log("没有点中");
            }
        }
    }
}


转载请注明出处:Mr_Jis的博客

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:90440次
    • 积分:590
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档
    最新评论