Unity笔记:移动物体到鼠标点击位置
Tags:鼠标点击 移动物体 Unity
实现效果
鼠标右键点击场景的某个位置,移动一个物体到点击处
代码如下
首先,声明几个变量:
private bool isMove; //是否移动
private bool isGround; //点击的点,射线是否到了地面
private RaycastHit hitInfo; //
public float moveSpeed = 5.0f; //移动速度
然后:
void Start () { //初始化
isMove = false;
isGround = false;
}
void Update () { //每帧调用,在这里调用此函数
MouseControllerMove();
}
void MouseControllerMove() { //鼠标控制移动
GetTargetPoint(); //得到点击点的信息
LookAtTarget(hitInfo.point); //转向点击的方向
MovePlayer(hitInfo.point); //移动物体到点击的位置
}
void GetTargetPoint() //得到点击点的信息
{
if (Input.GetMouseButtonDown(1)) //鼠标右键按下
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); //从相机发出一条射线
isGround = Physics.Raycast(ray, out hitInfo);
if (isGround && hitInfo.collider.tag == "Ground")
{
isMove = true; //如果是地面,则将要移动
}
}
}
void LookAtTarget(Vector3 hitPoint) {
if (isMove) { //如果要移动,先看向移动的方向,LookAt()为Unity自带的函数
transform.LookAt(hitInfo.point);
}
}
void MovePlayer(Vector3 hitPoint) {
if (isMove) {
float distance = Vector3.Distance(hitInfo.point, transform.position);//物体当前位置与点击处的距离
Vector3 direction = hitInfo.point - transform.position;//物体当前位置与点击处的方向
if (distance > 0.05f) {
transform.position += direction.normalized * moveSpeed * Time.deltaTime;//每秒移动moveSpeed的距离
}
else {
isMove = false;//满足到达条件,将移动状态isMove改为false
}
}
}
在这个功能中,主要用到的知识点:
- 检测鼠标按下:GetMouseButtonDown();//0位左键,1为右键,2位滑轮(按下)
- Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
Physics.Raycast(ray, out hitInfo);点击的点的信息保存在hitInfo中 - LookAt();让物体面对点击的方向
- Vector3.Distance();两个点的距离
- direction.normalized;将两个点的向量单位化