Unity Bound

原创 2016年06月01日 23:29:45

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的博客

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

unity 关于模型的边界框bounds

SkinnedMeshRenderer.Bounds的边界框默认是不能通过脚本修改的 在有蒙皮骨骼的模型Rig选项中改成Legacy的时候会出现这种情况,这个时候最好选择genetic导入,可以得到...

UGUI 计算RectTransform的Bounds

NGUIMathf里有个calculateRelativeWidgeBounds(Transform content) 的函数 用来计算 content下(包括content)的bounds  UGU...

Unity判断在物体内部和相交

在游戏开发中,有时要判断某个点是否在某个盒子里,其实Unity已经有支持的方法了,很容易就实现了.What you’re looking for is Bounds.Contains. The met...

unity3d中获得物体的size

以size的x方向为例 1:gameObject.renderer.bounds.size.x;//这个值的结果真实反应出有MeshRenderer这个组件的模型的尺寸。不需要再乘以localS...

UGUI内核大探究(十三)Dropdown

Dropdown(下拉框)可谓是UGUI的集大成者,在Unity Editor里新建一个Dropdown,会随之附赠Text(Label对象)、Image(Arrow对象)、ScrollRect(Te...

UGUI内核大探究(十六)InputField

InputField是UGUI的重要组件,可以提供文本输入功能,是与用户交互的一个重要手段。我们可以在编辑器里,为OnValueChanged和OnEndEdit两个事件添加监听,这样就可以获得用户输...

UGUI内核大探究(十五)Shadow与Outline

想在Unity3D里为一个图片或者文字添加阴影效果,只需要在该对象上在添加一个Shadow组件。Shadow通过为图像或者文字的Mesh添加顶点来实现阴影效果,而Outline是在对象四角上各添加了一...

UGUI内核大探究(十二)Slider

Slider是UGUI的一个组件,使用它可以实现滑动条,算是一个比较常用的组件,它与ScrollBar(参考UGUI内核大探究(十一)ScrollRect与ScrollBar)有些类似,但又不太相同。...

UGUI内核大探究(十四)Text

Text是UGUI里非常常用的一个组件,可以根据字符串显示文字。但其实Text的代码并没有很多,因为大部分逻辑是在TextGenerator里实现的,而TextGenerator是UnityEngin...

C#中调用父类的构造方法和成员

在Java中有一个Super关键字,可以调用父类的构造方法和非私有成员。C#中使用的关键字是base,但用法不完全相同。1. 调用父类的构造方法// 父类 public class Father { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)