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

Unity中如何临时将角色跳跃力提升至两倍并维持5秒?

解决Unity角色跳跃高度临时加倍(持续5秒)的问题

问题分析

你当前的代码直接修改了jumpPower但未保存原始值,也没有实现5秒后恢复的逻辑;另外Invoke无法和yield return配合使用——后者是协程专用的延迟方式,这是你之前尝试失败的核心原因。

修改方案

  1. 新增变量保存原始跳跃力量,避免硬编码数值
  2. 使用协程实现“临时加倍→等待5秒→恢复原值”的逻辑
  3. 添加状态标记防止道具效果叠加

修改后的完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class JumpController : MonoBehaviour
{   
    Rigidbody2D rb;
    [SerializeField] int jumpPower;
    [SerializeField] float fallMultiplier;

    public Transform GroundCheck;
    public LayerMask groundLayer;
    bool isGrounded;
    Vector2 vecGravity;
    private int originalJumpPower; // 保存原始跳跃力量
    private bool isJumpBoostActive = false; // 标记是否处于跳跃增益状态

    void Start()
    {
        vecGravity = new Vector2(0, -Physics2D.gravity.y);
        rb = GetComponent<Rigidbody2D>();
        originalJumpPower = jumpPower; // 初始化时保存原始值
    }

    void Update()
    {   
        isGrounded = Physics2D.OverlapCapsule(GroundCheck.position, new Vector2(1.8f, 0.3f), CapsuleDirection2D.Horizontal, 0, groundLayer);

        if (Input.GetButtonDown("Jump") && isGrounded)
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpPower);
        }

        if(rb.velocity.y < 0)
        {
            rb.velocity -= vecGravity * fallMultiplier * Time.deltaTime;
        }
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {    
        if (collision.gameObject.CompareTag("item") && collision.gameObject.name == "bounce" && !isJumpBoostActive)
        {
            StartCoroutine(JumpBoostCoroutine()); // 启动协程
            Destroy(collision.gameObject);
        }
    }

    // 处理跳跃增益的协程
    private IEnumerator JumpBoostCoroutine()
    {
        isJumpBoostActive = true;
        jumpPower = originalJumpPower * 2; // 跳跃力加倍
        yield return new WaitForSeconds(5f); // 等待5秒
        jumpPower = originalJumpPower; // 恢复原始跳跃力
        isJumpBoostActive = false;
    }
}

关键说明

  • originalJumpPower: 保存Inspector中设置的初始跳跃力,避免硬编码数值,让参数调整更灵活
  • isJumpBoostActive: 防止玩家连续触发道具,导致多次叠加增益效果
  • 协程JumpBoostCoroutine: 专门处理延迟恢复逻辑,是Unity中实现临时状态变更的标准方式,比Invoke更适合这种需要分步骤执行的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 23:47:33