Unity 2D C# 如何实现点击鼠标时让对象缓慢朝向点击坐标旋转
Unity 2D 点击鼠标缓动朝向目标点旋转实现
可直接运行的完整代码
using UnityEngine; public class ClickRotate : MonoBehaviour { // 旋转速度,可在Inspector面板直接调整数值,数值越大旋转越快 public float rotateSpeed = 120f; // 存储计算好的目标旋转角度 private Quaternion targetRotation; void Start() { // 初始化目标角度为对象初始角度 targetRotation = transform.rotation; } void Update() { // 检测鼠标左键点击 if (Input.GetMouseButtonDown(0)) { // 将鼠标屏幕坐标转换为2D世界坐标 Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 2D场景下固定Z轴和对象一致,避免坐标偏移 mouseWorldPos.z = transform.position.z; // 计算从当前对象指向点击位置的方向向量 Vector2 direction = (mouseWorldPos - transform.position).normalized; // 方向向量转Z轴旋转角:如果精灵默认朝右,删除末尾的-90f即可 float targetAngle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg - 90f; // 生成目标旋转四元数 targetRotation = Quaternion.Euler(0, 0, targetAngle); } // 均匀缓动旋转到目标角度,不会出现近距离旋转变慢的问题 transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, rotateSpeed * Time.deltaTime); // 需要同步向点击位置移动的话,取消下方注释,自行添加public float moveSpeed变量控制移动速度即可 // transform.position = Vector2.MoveTowards(transform.position, mouseWorldPos, moveSpeed * Time.deltaTime); } }
原代码核心问题说明
transform.Rotate传入了空的Vector3参数,没有实际生效的旋转值,不会产生旋转效果- 2D场景的旋转仅绕Z轴生效,不需要操作X/Y轴的旋转参数
- 2D场景下
transform.forward对应Z轴方向,移动时会改变Z轴坐标导致精灵显示层级异常,应该直接操作X/Y轴坐标
内容的提问来源于stack exchange,提问作者DEM0N
相关产品推荐
相关产品推荐

