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),可以在上述逻辑基础上配合动画控制器实现动画切换:
- 在动画控制器中添加布尔类型参数
IsFacingRight - 脚本中添加Animator引用,并在Update方法里更新参数:
// 在EnemyFacePlayer脚本中新增以下内容 [SerializeField] private Animator _enemyAnimator; private const string _isFacingRightParam = "IsFacingRight"; // 将这段代码放在Update方法的isPlayerOnRight判断之后 _enemyAnimator.SetBool(_isFacingRightParam, isPlayerOnRight);
- 在动画控制器中设置状态切换条件:当
IsFacingRight为true时播放右侧朝向动画,为false时播放左侧朝向动画。
内容的提问来源于stack exchange,提问作者Spax Wutz
相关产品推荐
相关产品推荐

