Unity 2D角色(Xeno)无限升空问题求助(Unity 2021.3.16f1)
问题解决:角色漂浮与跳跃异常修复
首先看你代码里的致命错误:
- 你在跳跃判断的
if (Input.GetButtonDown("Jump"))后面多了一个分号,这个分号会让if语句的逻辑直接结束,后面的大括号代码会每帧无条件执行——也就是角色每帧都会被设置y轴速度为jumpspeed,自然就一直往上飘,根本无法正常落地和跳跃。把这个分号删掉,就能解决漂浮问题。
不过就算修复了分号,当前代码还有个问题:没有判断角色是否在地面,会允许无限跳。给你补全地面检测的完整代码,你可以直接替换:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class XenoController : MonoBehaviour { public float speed = 10f; public float jumpspeed = 15f; private Rigidbody2D xeno; // 给角色脚下加一个空物体作为地面检测点,拖到这里 public Transform groundCheck; // 检测范围,根据角色大小调整 public float checkRadius = 0.2f; // 地面层,记得在Unity里把地面的Layer设为Ground public LayerMask groundLayer; private bool isGrounded; void Start() { xeno = GetComponent<Rigidbody2D>(); } void Update() { float direction = Input.GetAxis("Horizontal"); // 水平移动逻辑简化 xeno.velocity = new Vector2(direction * speed, xeno.velocity.y); // 跳跃逻辑:仅在地面时触发 if (Input.GetButtonDown("Jump") && isGrounded) { xeno.velocity = new Vector2(xeno.velocity.x, jumpspeed); } } // 固定更新中做地面检测,比Update更稳定 void FixedUpdate() { isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, groundLayer); } }
使用说明:
- 在角色脚下创建一个空GameObject,命名为GroundCheck,调整位置到角色碰撞体底部稍微偏下的位置
- 在Unity的Layer面板里新建一个Ground层,把所有地面对象的Layer设为Ground
- 把GroundCheck拖到脚本的groundCheck字段,groundLayer选择Ground层,调整checkRadius到合适大小
这样角色就只会在地面时触发跳跃,也不会再莫名漂浮了。
内容的提问来源于stack exchange,提问作者Fox Folklore
相关产品推荐
相关产品推荐

