Unity中如何让对象朝向鼠标位置旋转?(已实现移动功能)
解决玩家对象指向鼠标方向的旋转问题
嘿,这问题很常见!你已经搞定了移动到鼠标位置的逻辑,现在只需要加几行代码就能让对象自动指向鼠标方向啦。
核心思路
要让对象指向鼠标,我们需要三步:
- 算出对象当前位置到鼠标目标位置的方向向量
- 把这个方向向量转换成2D场景里的旋转角度(绕Z轴旋转)
- 将角度应用到对象的旋转属性上
修改后的完整代码
我已经在你的原有代码里嵌入了旋转逻辑,直接用就行:
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.




