首页 > 解决方案 > 如何在 2D 游戏中创建“冲刺”能力

问题描述

我正在尝试在具有能量条的 2d Unity (C#) 中创建一种冲刺能力,因此不能无休止地使用它。我错过了什么?

我试过让 sprint 成为一个函数,并在按下 X 键时调用它。试图乘以它的位置,但我在短距离内获得了闪烁的能力。

\\ this is my movement script, other variables we're declared earlier in the code

void Update() { 
        Vector2 mi = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
        mv = mi.normalized * speed;
    }

    private void FixedUpdate() {
        rb.MovePosition(rb.position + mv * Time.fixedDeltaTime);
    }

我希望代码在按下 X 键时让玩家以正常速度的两倍运行,但它只能在能量没有用完时使用。

标签: c#unity3d

解决方案


看不到您对“能量”的实现,但我会简单地使用

public float energy;
// How much is energy reduced per second?
public float decreaseSpeed;

如果按下 x 来提高速度

private void Update()
{
    Vector2 mi = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
    mv = mi.normalized * speed;

    if(Input.GetKey(KeyCode.X) && energy > 0)
    {
        // Reduce energy by decreaseSpeed per second
        energy -= decreaseSpeed * Time.deltaTime;

        // if needed avoid negative value
        energy = Mathf.Max(0, energy);

        // double the move distance
        mv *= 2;
    }
}

顺便说一句,建议使用Time.deltaTime而不是Time.fixedDeltaTime也使用 in FixedUpdate(请参阅Time.fixedDeltaTime


推荐阅读