1、功能描述
当玩家点击鼠标时,场景中的物体会移动到鼠标点击的位置。这个功能可以用于控制角色移动、放置物体等场景。
2、实现步骤
创建Unity项目:首先,打开Unity并创建一个新的3D项目。
添加3D物体:在场景中创建一个3D物体,比如一个球体(Sphere)。
创建脚本:在Assets文件夹中创建一个新的C#脚本,命名为ClickToMove。
编写代码:打开ClickToMove
脚本,编写以下代码:
using UnityEngine;
public class ClickToMove : MonoBehaviour
{
// 移动速度,可以在Inspector面板中调整
public float moveSpeed = 10f;
// 目标位置
private Vector3 targetPosition;
// 是否正在移动
private bool isMoving = false;
void Update()
{
// 检测鼠标左键点击
if (Input.GetMouseButtonDown(0))
{
// 获取鼠标点击的位置
SetTargetPosition();
}
// 如果正在移动,向目标位置移动
if (isMoving)
{
Move();
}
}
void SetTargetPosition()
{
// 从鼠标点击的位置发射一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
// 如果射线击中某个物体
if (Physics.Raycast(ray, out hit))
{
// 设置目标位置为击中点的位置
targetPosition = hit.point;
isMoving = true;
}
}
void Move()
{
// 计算移动方向
Vector3 direction = targetPosition - transform.position;
// 如果物体还没有到达目标位置
if (direction.magnitude > 0.1f)
{
// 移动物体
transform.Translate(direction.normalized * moveSpeed * Time.deltaTime);
}
else
{
// 到达目标位置,停止移动
isMoving = false;
}
}
}
挂载脚本:将ClickToMove
脚本拖拽到场景中的球体上,使其成为球体的组件。
添加地面:在场景中创建一个平面(Plane)作为地面,确保鼠标点击时可以检测到地面的碰撞。
3、代码解释
-
moveSpeed
:公共变量,用于控制物体移动的速度。你可以在Unity的Inspector面板中直接调整这个值。 -
targetPosition
:私有变量,用于存储鼠标点击的目标位置。 -
isMoving
:布尔变量,用于判断物体是否正在移动。 -
SetTargetPosition()
:这个方法通过射线检测获取鼠标点击的位置,并设置为目标位置。 -
Move()
:这个方法用于移动物体到目标位置。使用transform.Translate()
方法来实现物体的移动。 -
Physics.Raycast()
:这是Unity中的一个内置函数,用于检测射线是否击中某个物体。
通过这个简单的功能,可以轻松实现Unity中物体的鼠标点击移动。