今天想做一个unity3d的rpg游戏demo,实现点击地图即移动到该点的功能,但是我游戏的摄像机视角一直在变,那如果判断是否点击在可以走的地方呢。网上找了一个demo脚本,原理是当我们点击屏幕时,我们按照一定的方法,将屏幕上的二维坐标转化为三维坐标,然后从主摄像机向点击位置发送一条射线,该射线与地面相交,然后判断该射线是否可以碰到目标区域,即移动。C#脚本代码如下:
using UnityEngine;
using System.Collections;
public class PeopleControl : MonoBehaviour {
//目标点坐标
private Vector3 mTargetPos;
void Start ()
{
}
void Update ()
{
//按下鼠标右键时
if(Input.GetMouseButton(1))
{
//获取屏幕坐标
Vector3 mScreenPos=Input.mousePosition;
//定义射线
Ray mRay=Camera.main.ScreenPointToRay(mScreenPos);
RaycastHit mHit;
//判断射线是否击中地面
if(Physics.Raycast(mRay,out mHit))
{
if(mHit.collider.gameObject.tag=="Terrain")
{
//获取目标坐标
mTargetPos=mHit.point;
//让主角面朝目标坐标并向目标移动
transform.LookAt(mTargetPos);
//播放奔跑动画
transform.gameObject.GetComponent<Animation>().Play("run");
transform.Translate(Vector3.forward * 0.5F);
}
}
}
//松开鼠标右键时
if(Input.GetMouseButtonUp(1))
{
transform.gameObject.GetComponent<Animation>().Play("idle");
}
}
}