Unity 2D中如何让火柴人手臂朝向鼠标光标?
实现Unity 2D火柴人手臂朝向鼠标光标
先看你的火柴人效果:

可以通过以下步骤实现手臂跟随鼠标:
- 步骤1:给手臂挂载脚本
给火柴人手臂的GameObject添加如下C#脚本,核心是计算鼠标与手臂的相对位置,转换为旋转角度:
using UnityEngine; public class ArmFollowMouse : MonoBehaviour { [Header("角度偏移(根据手臂初始朝向调整)")] public float angleOffset = 0f; void Update() { // 将鼠标屏幕坐标转为世界坐标(2D场景下z轴设为0,避免深度问题) Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mouseWorldPos.z = 0f; // 计算手臂指向鼠标的方向向量 Vector3 lookDirection = mouseWorldPos - transform.position; lookDirection.Normalize(); // 计算旋转角度(弧度转角度) float targetAngle = Mathf.Atan2(lookDirection.y, lookDirection.x) * Mathf.Rad2Deg; // 应用角度偏移后设置旋转 transform.rotation = Quaternion.Euler(0, 0, targetAngle + angleOffset); } }
步骤2:调整角度偏移
如果手臂初始朝向和计算出的角度不匹配(比如手臂默认朝上,但鼠标在右侧时手臂却朝右),可以在Inspector面板中调整angleOffset值,比如加90或者减90,直到旋转方向符合预期。注意事项
- 确保主相机是正交相机(2D项目默认设置),如果是透视相机,需要调整
mouseWorldPos.z为相机到手臂的距离; - 手臂的 pivot 点要设置在肩膀位置,否则旋转会出现偏移;
- 如果需要限制手臂旋转范围(比如不能绕到背后),可以用
Mathf.Clamp对targetAngle进行范围限制。
- 确保主相机是正交相机(2D项目默认设置),如果是透视相机,需要调整
内容的提问来源于stack exchange,提问作者zeenub
相关产品推荐
相关产品推荐

