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

Unity 2D横版跳跃游戏:敌人随玩家左右位置X轴翻转180度咨询

Unity 2D横版敌人随玩家位置翻转朝向的实现

是否需要动画控制器?

单纯实现X轴180度翻转的功能,完全不需要动画控制器——直接修改敌人Transform的缩放属性就能搞定。但如果你的敌人有左右朝向的专属动画(比如左右行走的帧动画不同),动画控制器可以用来切换对应动画状态,但翻转本身的核心逻辑和它无关。

最简实现代码

给敌人挂载以下C#脚本即可,核心逻辑就是实时对比玩家与敌人的X坐标,根据位置调整敌人的缩放值(X轴取正负实现翻转):

using UnityEngine;

public class EnemyFacePlayer : MonoBehaviour
{
    [SerializeField] private Transform player; // 在编辑器面板拖拽玩家对象到此处
    private Vector3 _originalScale;

    void Start()
    {
        // 记录敌人初始缩放比例,避免修改Y、Z轴的显示效果
        _originalScale = transform.localScale;
    }

    void Update()
    {
        if (player == null) return;

        // 判断玩家处于敌人的左侧还是右侧
        bool isPlayerOnRight = player.position.x > transform.position.x;

        // 设置朝向:玩家在右侧时用原始缩放,左侧时翻转X轴
        float targetXScale = isPlayerOnRight ? _originalScale.x : -_originalScale.x;
        transform.localScale = new Vector3(targetXScale, _originalScale.y, _originalScale.z);
    }
}

进阶:结合动画控制器的情况

如果敌人有左右朝向的专属动画(比如WalkLeft、WalkRight),可以在上述逻辑基础上配合动画控制器实现动画切换:

  1. 在动画控制器中添加布尔类型参数IsFacingRight
  2. 脚本中添加Animator引用,并在Update方法里更新参数:
// 在EnemyFacePlayer脚本中新增以下内容
[SerializeField] private Animator _enemyAnimator;
private const string _isFacingRightParam = "IsFacingRight";

// 将这段代码放在Update方法的isPlayerOnRight判断之后
_enemyAnimator.SetBool(_isFacingRightParam, isPlayerOnRight);
  1. 在动画控制器中设置状态切换条件:当IsFacingRight为true时播放右侧朝向动画,为false时播放左侧朝向动画。

内容的提问来源于stack exchange,提问作者Spax Wutz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:47:19