码迷,mamicode.com
首页 > 其他好文 > 详细

物理引擎——05射线

时间:2015-11-23 07:44:33      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

学习笔记适合新手,如有错误请指正。?号处也请各位指点下,谢谢。

射线(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)直接将射线的构成元素、起点和方向传入

物理引擎——05射线

标签:

原文地址:http://www.cnblogs.com/kubll/p/4987340.html

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