【蓝鸥Unity开发基础三】课时18 射线【完结】
推荐视频讲师博客:http://11165165.blog.51cto.com/
一、射线
虚拟射线能够检测所碰撞到的物体
使用Physics类的Raycast方法实现射线碰撞检测功能
回到Unity中我们来一个功能:
场景中有一个底面 一个Cube玩家,在3DRPG游戏中,可以通过鼠标的右键点击对面,来让玩家移动。
1、创建一个地面,拉大,然后用材质球染成绿色
2、接下来创建一个Cube,作为玩家,让Cube处于地面上,然后用材质球染成红色。
3、调整一下摄像机的视角
4、然后为了能实现移动,我们需要对玩家Cube添加脚本PlayerController
5、在脚本中来实现功能
using UnityEngine;
using System.Collections;
public class PlayerController : MonoBehaviour {
/* 在场景中鼠标点击地面后,角色可以移动到目标位置 */
public float speed;// 角色移动速度
private Vector3 target;//目标位置
private bool isOver=true;//移动施法结束
void Update () {
if(Input.GetMouseButtonDown(0)){
//1、获取鼠标点击时的目标位置/目标点
//使用射线实现
//1、创建射线
//从摄像机发射出一条经过鼠标当前位置的射线
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
//2、发射射线
RaycastHit hitInfo=new RaycastHit();
if(Physics.Raycast(ray,out hitInfo)){
//获取碰撞点位置
if(hitInfo.collider.name=="Plane"){
target= hitInfo.point;
target.y = 0.5f;//地面上,不陷入地面
isOver=false;
}
}
}
//2、让角色移动到目标位置
MoveTo (target);
}
//让角色移动到目标位置
private void MoveTo(Vector3 tar){
if (!isOver) {
Vector3 v1 = tar-transform.position;
transform.position += v1.normalized *speed*Time.deltaTime;
if(Vector3.Distance(tar,transform.position)<=0.1f){
isOver=true;
transform.position = tar;
}
}
}
}
6、设置speed 的值
转载于:https://blog.51cto.com/11131960/1855721