Unity 2D中如何根据旋转角度翻转作为子对象的枪Sprite?
实现步骤
1. 获取子对象SpriteRenderer组件
有两种常用实现方式:
- 手动绑定(推荐,稳定性最高):在脚本中声明公开的SpriteRenderer字段,直接在Inspector面板将枪的子Sprite对象拖拽到对应字段槽位即可。
- 自动查找:脚本运行时自动从当前对象的子节点中获取SpriteRenderer组件,无需手动操作。
2. 添加翻转逻辑
在计算完旋转角度angle后,判断角度范围,同步修改SpriteRenderer的flipY属性即可,角度判断规则和需求一致:当角度处于(-90°,90°)区间时开启flipY,反之关闭。
修改后完整代码
public class Gun : MonoBehaviour { private Rigidbody2D rb; public Camera cam; // 新增枪Sprite的Renderer字段 public SpriteRenderer gunSprite; Vector2 mousePos; Vector2 lookDir; private float angle; void Start() { rb = GetComponent<Rigidbody2D>(); // 如果想用自动查找,取消下面这行的注释即可,无需手动拖拽赋值 // gunSprite = GetComponentInChildren<SpriteRenderer>(); } void FixedUpdate() { lookDir = mousePos - rb.position; angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg; rb.rotation = angle; // 新增翻转判断逻辑 gunSprite.flipY = angle is > -90 and < 90; } void Update() { mousePos = cam.ScreenToWorldPoint(Input.mousePosition); } }
注意事项
- 如果子对象层级复杂有多个SpriteRenderer,优先用手动绑定的方式,避免自动查找找错对象
- 若角度范围判断后翻转效果和预期相反,直接把
flipY的赋值条件取反即可:gunSprite.flipY = !(angle is > -90 and < 90);
内容的提问来源于stack exchange,提问作者Toliman
相关产品推荐
相关产品推荐

