Unity谷歌贪吃蛇游戏角色上下翻转异常问题求助
解决贪吃蛇角色上下翻转异常问题
你的问题出在Flip()方法的逻辑上——当前代码不管按哪个方向键,都会只翻转角色的X轴缩放,这就导致上下方向(W/S键)触发时,执行的还是左右翻转的操作。
修改方案
我们需要区分左右方向和上下方向的翻转逻辑,分别处理X轴和Y轴的缩放:
修改后的完整代码
using System.Collections; using System.Collections.Generic; using UnityEngine; public class snakemovement : MonoBehaviour { private Vector2 _direction = Vector2.right; bool facingRight = true; bool facingUp = true; // 记录当前上下朝向 void Update() { if (Input.GetKeyDown(KeyCode.W)) { _direction = Vector2.up; FlipVertical(); } else if (Input.GetKeyDown(KeyCode.S)) { _direction = Vector2.down; FlipVertical(); } else if (Input.GetKeyDown(KeyCode.D)) { _direction = Vector2.right; if (!facingRight) FlipHorizontal(); } else if (Input.GetKeyDown(KeyCode.A)) { _direction = Vector2.left; if (facingRight) FlipHorizontal(); } } private void FixedUpdate() { transform.position = new Vector3( Mathf.Round(transform.position.x) + _direction.x, Mathf.Round(transform.position.y) + _direction.y, 0.0f); } // 处理左右翻转 void FlipHorizontal() { Vector3 currentScale = transform.localScale; currentScale.x *= -1; transform.localScale = currentScale; facingRight = !facingRight; } // 处理上下翻转 void FlipVertical() { Vector3 currentScale = transform.localScale; currentScale.y *= -1; transform.localScale = currentScale; facingUp = !facingUp; } }
关键修改点
- 拆分翻转方法:把原来单一的
Flip()拆成FlipHorizontal()和FlipVertical(),分别负责X轴和Y轴的缩放翻转 - 新增朝向记录变量:
facingUp用来跟踪角色当前上下朝向,避免同一方向重复触发翻转 - 方向判断优化:在触发翻转前先检查当前朝向,只有和目标方向相反时才执行翻转,减少不必要的操作
这样修改后,按W/S键时角色会正确执行上下翻转,A/D键保持正常的左右翻转逻辑。
内容的提问来源于stack exchange,提问作者Mr penguin
相关产品推荐
相关产品推荐

