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

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);
    }
}

使用说明:

  1. 在角色脚下创建一个空GameObject,命名为GroundCheck,调整位置到角色碰撞体底部稍微偏下的位置
  2. 在Unity的Layer面板里新建一个Ground层,把所有地面对象的Layer设为Ground
  3. 把GroundCheck拖到脚本的groundCheck字段,groundLayer选择Ground层,调整checkRadius到合适大小

这样角色就只会在地面时触发跳跃,也不会再莫名漂浮了。

内容的提问来源于stack exchange,提问作者Fox Folklore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:10:32