Unity中如何实现鼠标朝向相反方向时翻转物体/武器朝向
Unity2D 武器跟随鼠标朝向+左右翻转实现方案
核心判断逻辑直接复用现有代码中已经计算好的鼠标与物体的方向向量即可,不需要额外做坐标检测,无额外性能损耗。
实现逻辑要点
- 方向向量
dir的x分量符号直接代表鼠标相对物体的左右位置:dir.x > 0为右侧,dir.x < 0为左侧 - 朝向翻转通过修改物体
localScale的x值实现,不会破坏原有旋转逻辑的计算结果 - 物体x轴翻转后会导致y轴方向镜像,需要对角度计算中的y方向值取反,避免武器出现上下颠倒的问题
修改后完整代码
public class WeaponParent : MonoBehaviour { public float blahblah = 90; void Update() { faceMouse(); } void faceMouse() { Vector2 dir = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position; float angle; // 鼠标在物体右侧 if (dir.x >= 0) { transform.localScale = new Vector3(1, 1, 1); angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; } // 鼠标在物体左侧 else { transform.localScale = new Vector3(-1, 1, 1); // 翻转后y方向镜像,取反修正角度避免上下颠倒 angle = Mathf.Atan2(-dir.y, dir.x) * Mathf.Rad2Deg; } Quaternion rotation = Quaternion.AngleAxis(angle - blahblah, Vector3.forward); transform.rotation = rotation; } }
适配说明
如果武器预制体初始朝向不是正右方,只需要调整
blahblah的角度偏移值、以及localScale的初始正负值匹配美术资源即可,不需要改动核心判断逻辑。如果武器是角色节点的子物体,该脚本直接挂载到武器根节点上就可以正常运行,不会影响角色其他部位的显示。
内容的提问来源于stack exchange,提问作者Cottontail
相关产品推荐
相关产品推荐

