Unity 2D平台游戏地面Tilemap翻转及玩家移动异常问题求助
修复方案
1 核心代码错误修复(首要故障原因)
你提供的玩家移动脚本中Jump方法存在轴赋值颠倒的致命问题:
原代码把跳跃速度赋值给了水平X轴,每次按跳跃都会给玩家施加一个极高的水平冲力,撞击到未设置静态属性的地面Tilemap时,就会带动Tilemap发生旋转、位移,表现为地面突然变垂直且滚动。
// 错误的跳跃写法 private void Jump() { if (Input.GetKeyDown(KeyCode.Space) && isGrounded) { body.velocity = new Vector2(jumpVelocity, body.velocity.x); } }
修改为正确写法,将跳跃速度赋值给竖直Y轴,保留原有水平移动速度:
// 修正后的跳跃写法 private void Jump() { if (Input.GetKeyDown(KeyCode.Space) && isGrounded) { body.velocity = new Vector2(body.velocity.x, jumpVelocity); } }
2 Tilemap 碰撞体配置修正
- 给地面Tilemap所在的游戏对象添加
Rigidbody2D组件,将Body Type属性设置为Static,静态刚体不会受到任何物理力的影响,不会被玩家撞动 - 若要避免玩家移动时在Tile拼接处出现卡缝问题,可额外添加
Composite Collider 2D组件,同时勾选Tilemap Collider 2D组件的Used By Composite选项,将所有Tile的离散碰撞合并为一个整体碰撞体 - 确认地面Tilemap所在的层级,和你代码中
groundLayer选中的层级保持一致,避免误检测到玩家自身或其他物体
3 玩家刚体配置修正
选中玩家游戏对象,找到Rigidbody2D组件的Constraints配置项,勾选Freeze Rotation Z,防止玩家受碰撞后发生旋转,避免视角跟随玩家时误以为地面发生了旋转。
内容的提问来源于stack exchange,提问作者Harry_C
相关产品推荐
相关产品推荐

