You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:39:03