unity3d 射线检测RayCast

前言

射线检测即对一个碰撞器进行检测,如果碰撞到碰撞器,则返回true,否则返回false,这个检测是一条射线,这条射线由我们自己设置
一般在Update函数配合if()来使用
RayCast有10多个重载这里以其中一个为例

代码例子

RaycastHit hit 此为射线碰撞到的物体碰撞器,
以out hit传入 当射线碰撞到物体时,返回true,hit则是对应的碰撞物体的碰撞器
可以通过hit来找到碰撞到的物体对象信息

public static bool Raycast (Vector3 origin, Vector3 direction, out RaycastHit hitInfo, float maxDistance, int layerMask);
using UnityEngine;
using System.Collections;

public class MyHero : MonoBehaviour {

    //设置层级 : 和当前层级物体进行碰撞检测
    public LayerMask _layerMask;

    void Update(){
        //1. 射线开始的位置
        //2. 射线的方向
        //3. 碰撞信息
        //4. 射线的最大距离
        //5. 层级
        RaycastHit hit;
        if(Physics.Raycast (transform.position, transform.forward, out hit, 2, _layerMask)){
            Debug.Log (hit.collider.gameObject.name);
        }

    }
    void OnDrawGizmos(){
        Gizmos.color = Color.red;
        Gizmos.DrawRay (transform.position, transform.forward * 2);
    }
}

我们可以通过OnDrawGizmos()函数(Gizmos制作测试工具)来把这条射线画出来
该函数不需要通过播放显示,unity编译完既可以显示出一条射线

    void OnDrawGizmos(){
        Gizmos.color = Color.red;
        Gizmos.DrawRay (transform.position, transform.forward * 2);
    }

1

猜你喜欢

转载自blog.csdn.net/liaoshengg/article/details/81100921