码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D 之射线检测

时间:2016-07-30 23:55:59      阅读:301      评论:0      收藏:0      [点我收藏+]

标签:

这里来记录下射线检测的相关内容:

射线检测故名就是通过射线去检测是否和碰撞器产生了交集,和碰撞器与碰撞器发生交集一样,会返回一个真。

射线的用法很多:比如检测是否跳跃,通过向地面投射射线控制在地面时候可以跳起。

        射击游戏中可以通过定长射线去判断目标物体是否被击中,等

主要用到的工具类是:

Physics

RaycastHit 光线投射碰撞

Ray 射线

第一种是:

Physics.Linecast 线性投射

从开始位置到结束位置做一个光线投射,如果与碰撞体交互,返回真。

        Debug.DrawLine(transform.position, Line_floor.position, Color.red, 1f);
        bool grounded  = Physics.Linecast(transform.position, Line_floor.position, 1 << LayerMask.NameToLayer("Ground"));
        if (grounded)
        {
            Debug.LogError("发生了碰撞");   
  
        }
        else {
            Debug.LogError("碰撞结束");
        }

第二种:

在场景中投下可与所有碰撞器碰撞的一条光线。可控制投射方向和投射长度

 Vector3 fwd = transform.TransformDirection(-Vector3.up);
  bool grounded =  Physics.Raycast(transform.position,fwd, 10 );
        if (grounded)
        {
            Debug.LogError("发生了碰撞");   
  
        }
        else {
            Debug.LogError("碰撞结束");
        }

第三种:

在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息。

    RaycastHit hit;
         bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit);
         // 可控制投射距离bool grounded = Physics.Raycast(transform.position, -Vector3.up, out hit,100.0);
        if (grounded)
        {
            Debug.LogError("发生了碰撞");
            Debug.LogError("距离是:" + hit.distance);
            Debug.LogError("被碰撞的物体是:" + hit.collider.gameObject.name);
  
        }
        else {
            Debug.LogError("碰撞结束");
        }

注意,这里返回的碰撞器的信息是依次的,先返回第一个碰撞的,第一个碰撞结束后才返回第二个。

技术分享

Physics.RaycastAll 所有光线投射

投射一条光线并返回所有碰撞,也就是投射光线并返回一个RaycastHit[]结构体。

        RaycastHit[] hits;
        hits = Physics.RaycastAll(transform.position, -Vector3.up, 100.0F);
        int i = 0;

        while (i < hits.Length)
        {
            Debug.LogError("发生了碰撞");
            RaycastHit hit = hits[i];
            Debug.LogError("被碰撞的物体是:" + hit.collider.gameObject.name);
            i++;
        }

 

Unity3D 之射线检测

标签:

原文地址:http://www.cnblogs.com/sunxun/p/5721935.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!