You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity中如何让对象朝向鼠标位置旋转?(已实现移动功能)

解决玩家对象指向鼠标方向的旋转问题

嘿,这问题很常见!你已经搞定了移动到鼠标位置的逻辑,现在只需要加几行代码就能让对象自动指向鼠标方向啦。

核心思路

要让对象指向鼠标,我们需要三步:

  1. 算出对象当前位置到鼠标目标位置的方向向量
  2. 把这个方向向量转换成2D场景里的旋转角度(绕Z轴旋转)
  3. 将角度应用到对象的旋转属性上

修改后的完整代码

我已经在你的原有代码里嵌入了旋转逻辑,直接用就行:

private Vector3 _target;
public Camera Camera;
public bool FollowMouse;
public bool ShipAccelerates;
public float ShipSpeed = 2.0f;
// 可选:如果你的对象初始朝向不对,比如飞船默认朝上,可设为90f调整偏移
public float RotationOffset = 0f;

public void OnEnable() {
    if (Camera == null) {
        throw new InvalidOperationException("Camera not set");
    }
}

public void Update() {
    if (FollowMouse || Input.GetMouseButton(0)) {
        _target = Camera.ScreenToWorldPoint(Input.mousePosition);
        _target.z = 0;
    }

    // 原有移动逻辑保持不变
    var delta = ShipSpeed * Time.deltaTime;
    if (ShipAccelerates) {
        delta *= Vector3.Distance(transform.position, _target);
    }
    transform.position = Vector3.MoveTowards(transform.position, _target, delta);

    // 新增:旋转指向鼠标的核心逻辑
    Vector3 direction = _target - transform.position;
    // 避免对象和鼠标位置完全重合时的旋转异常
    if (direction.magnitude > 0.01f) {
        // 将方向向量转为角度(弧度转成可直接用的角度值)
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        // 应用偏移后设置旋转(绕Z轴实现2D平面旋转)
        transform.rotation = Quaternion.AngleAxis(angle + RotationOffset, Vector3.forward);
    }
}

关键细节提醒

  • Mathf.Atan2(direction.y, direction.x):这是2D场景里计算旋转角度的标准方法,返回的是从X轴正方向到目标方向的弧度值,转成角度后正好对应我们需要的旋转量
  • RotationOffset:如果你的飞船美术资源默认是“朝上”的,而你希望船头对着鼠标,就把这个值改成90f,根据你的素材调整就行
  • 方向判空:加了direction.magnitude > 0.01f的判断,防止对象和鼠标位置完全重叠时出现奇怪的旋转抖动

这样修改后,你的飞船就会一边往鼠标位置移动,一边自动旋转指向鼠标方向啦!

内容的提问来源于stack exchange,提问作者Gheorghe C.

火山引擎 最新活动