射线检测

我一开始是在一个高亮脚本里面看到的射线检测

example1

        if(Input.GetMouseButtonDown(0)) {
            var ray = Camera.main.ScreenPointToRay(Input.mousePosition);//鼠标的屏幕坐标转化为一条射线
            RaycastHit hit;

            //距离为5
            //if(Physics.Raycast(ray, out hit, 5)) {
            //    var hitObj = hit.collider.gameObject;
            //    Debug.Log(hitObj);
            //}
            //无距离限制
            if(Physics.Raycast(ray, out hit)) {
                var hitObj = hit.collider.gameObject;
                SetObjectHighlight(hitObj);
                Debug.Log(hitObj);
            }

example2:沿世界坐标系中的矢量方向发射射线

void Update () {  
                   // 以摄像机所在位置为起点,创建一条向下发射的射线  
                   Ray ray = new Ray(transform.position, -transform.up);  
                   RaycastHit hit;  
                   if(Physics.Raycast(ray, out hit, Mathf.Infinity))  
                   {  
                       // 如果射线与平面碰撞,打印碰撞物体信息  
                       Debug.Log("碰撞对象: " + hit.collider.name);  
                        // 在场景视图中绘制射线  
                       Debug.DrawLine(ray.origin, hit.point, Color.red); 
                   }  
               }  

Ray射线类和RaycastHit射线投射碰撞信息类是两个最常用的射线工具类。

射线Ray的构造函数为 :public Ray(Vector3 origin, Vector3 direction);

RaycastHit类用于存储发射射线后产生的碰撞信息。
如果我们要获取碰撞的物体的话 就是 hit.collider.gameObject
获取碰撞物体的名称的话 hit.collider.name

Physics.Raycast静态函数用于在场景中发射一条可以和碰撞器碰撞的射线
public static bool Raycast(Vector3 origin, Vector3 direction, RaycastHit hitInfo, float distance =Mathf.Infinity, int layerMask = DefaultRaycastLayers);
Raycast方法是一个返回bool值的方法

这个重载函数定义了一个碰撞信息类RaycastHit**,
在使用时通过out关键字传入一个空的碰撞信息对象。当射线与碰撞器发生碰撞时,该对象将被赋值,可以获得碰撞信息包括transform、rigidbody、point 等。如果未发生碰撞,该对象为空。

3
针对向屏幕上的某一点发射射线,Unity 3D为我们提供了两个API函数以供使用,分别是ScreenPointToRay和ViewportPointToRay。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值