You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 05:57:04