这个demo主要是使用了射线来实现的
本来要给用视频的方式展示但是不知道好像不支持本地的视频还是什么没弄清楚这里就用一张图代替了这个场景就摄像机上面一个脚本也是非常简单
这个移动效果就跟lol的移动一样鼠标点击地面会有一个绿点然后人物看向那里然后移动过去
/// <summary>
/// 射线
/// 射线可以打中碰撞体也可以打中触发器
/// </summary>
public class RayDemo : MonoBehaviour
{
public GameObject go;
public Transform Player;
void Update ()
{
Dome();
MoveControl();
}
/// <summary>
/// 练习
/// 人物移动到鼠标点击位置
/// </summary>
void Dome()
{
if (Input.GetMouseButtonDown(0))
{
//生成一条从摄像机发出的射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//用来存储射线打中物体的信息
RaycastHit hit;
//发射射线
bool result = Physics.Raycast(ray, out hit);
//如果为true说明打中物体了
if (result)
{
//获取射线打中的物体
//hit.collider;
//获取射线打中的坐标(这是一个世界坐标)
//hit.point;
//获取打中的目标
go.transform.position = hit.point;
//激活点
go.SetActive(true);
}
}
}
void MoveControl()
{
if (go.activeSelf==false)
{
return;
}
//将角色转向到指定的方向
Player.transform.rotation = Quaternion.Lerp(Player.transform.rotation, Quaternion.LookRotation(go.transform.position - new Vector3(Player.position.x, 0, Player.position.z)), Time.deltaTime * 20f);
//移动
Player.Translate(Vector3.forward * 5 * Time.deltaTime);
//检测到终点的距离
if (Vector3.Distance(Player.position,go.transform.position)<2f)
{
//到达终点
go.SetActive(false);
}
}
}