挂载在物体上,需要给地形添加Terrain标签
using UnityEngine;
using System.Collections;
public class dfdfdfdf : MonoBehaviour
{
//目标点坐标
private Vector3 mTargetPos;
public float speed=5f;
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 * speed*Time.deltaTime);
}
}
}
//松开鼠标右键时
//if (Input.GetMouseButtonUp(1))
//{
// transform.gameObject.GetComponent<Animation>().Play("idle");
//}
}
}
第二种方法,移动到鼠标点击位置
挂载在物体上,需要给地面添加Plane标签
using UnityEngine;
using System.Collections;
public class dfdfdfdf : MonoBehaviour
{
Ray ray;
RaycastHit hit;
bool state = false;
public float moveSpeed;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.tag == "Plane")
{
state = true;
}
}
}
if (state)
{
transform.forward = Vector3.Lerp(transform.forward, hit.point - transform.forward, Time.deltaTime);
transform.position = Vector3.MoveTowards(transform.position, hit.point, Time.deltaTime * moveSpeed);
}
}
}