前言
射线检测即对一个碰撞器进行检测,如果碰撞到碰撞器,则返回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);
}