标签:
学习笔记适合新手,如有错误请指正。?号处也请各位指点下,谢谢。
射线(Ray)是所有3D游戏里都会使用的一项技术,被广泛地运用在路径寻找,AI逻辑和命中判断中
创建一个球体作为玩家,创建一个立方体作为障碍,新建脚本绑定在玩家上,代码如下:
using UnityEngine; using System.Collections; public class C_7_5 : MonoBehaviour { private Vector3 direction = new Vector3(1,0,0);//前进及射线方向 private float distance = 1f;//射线距离 void Update () { transform.position += direction * Time.deltaTime;//玩家向右移动 Ray ray = new Ray(transform.position, direction);//新建射线 RaycastHit info;//接受射线撞击信息的变量 //发射射线方法1 if (Physics.Raycast (ray,out info,distance) ){ //发现障碍 Debug.Log ("前方有障碍"+info.collider.name); } Debug.DrawLine(ray.origin,ray.origin + direction*distance);//用DrawLine显示射线 // //发射射线方法2 // if (Physics.Raycast (transform.position, new Vector3(1,0,0),1)) { // Debug.Log ("前方有障碍!"); // } // //发射射线方法3 // if (Physics.Raycast (transform.position,transform.forward,1)) { // Debug.Log ("前方有障碍!"); // } } }
首先创建Vector3变量direction,代表前进及射线方向
接着创建float类型冰凉distance代表射线终止的距离
Player对象即球体一直向右前进
然后创建一个ray对象,构造函数的第一个参数是射线的起点,第二个参数是射线的方向
RaycastHit info用来节后射线撞击信息的变量
Raycast返回的是一个布尔值,true表示碰撞到东西,False表示没有
至于射线碰撞到了什么物体,在什么位置等返回给第二个参数info
最后用Debug.DrawLine()函数将射线可视化显示
注意该函数需要勾选Game窗口的Gizmos选项才会显示
也可以不用创建Ray,例如Physics.Raycast(transform.position,transform.forward,1)直接将射线的构成元素、起点和方向传入
标签:
原文地址:http://www.cnblogs.com/kubll/p/4987340.html