团结:球员耐力和速度操纵。 C#

Unity: Player Stamina and speed manipulation. c#

我已经为我的玩家添加了耐力,当耐力条为空时,玩家的速度会降低到 2。当他收集某种能量时,它会为他提供耐力。

当体力为空时我设置speed = 2;当我收集能量时,我会稍微填充耐力条和 return 速度 (speed = 7;)。

问题在另一个层面。在 lvl 2 中,地图不同,玩家也会改变。如果我在地图 1 和地图 2 中使用相同的速度,那么玩家在地图 2 中会非常快。考虑到这一点,速度是 public,我在检查器中对其进行了编辑。

现在我正在将我的速度硬编码为speed = 7;这适用于所有场景和级别。我怎样才能让速度更快public,我可以只为这个场景编辑它,还是有办法说speed = otherSpeed

public void AddStamina(int a_staminaToAdd)
{
    // Add stamina when we take coffee.
    g_currStamina += a_staminaToAdd;
    // Disable the "need stamina: text
    g_lowStaminaTxt.enabled = false;

}

public void DeductStamina(int amount)
{
    // only deduct stamina will player is moving on ground
    if (isPlayerGrounded)
    {
        // How much stamina are we going to deduct when player is running?
        g_currStamina -= amount;
        // Change the slider value depending on the stamina
        g_StaminaSlider.value = g_currStamina;

        if (g_currStamina <= 0 )
        {
            //TODO : Go slower
            m_speed = 2;
            g_currStamina = 0;
            g_lowStaminaTxt.enabled = true;
            IsStaminaEmpty = true;

        }

        else
            g_lowStaminaTxt.enabled = false;
    }

}

将您的变量拉出函数作用域。并将它们添加到 class 级别。

class foo : monobehaviour
{
    // Give a default value. This can be changed in the editor
    public int SlowSpeed = 2;
    public int FastSpeed = 7;

    // Your functions somewhere here.
}

现在变量是在 class 级别上定义的,并且是 public 您可以使用编辑器统一更改值。默认情况下将使用 2 和 7,如果您在特定场景中更改这些值中的任何一个,这些值将在您更改它们时应用。

现在您需要将 m_speed = 2; 更改为 m_speed = SlowSpeed; 才能正常工作

通常的解决方案是使用静态成员。

一个好的解决方案是将玩家的数据值存储在单独的 class 中(因此它也对多人游戏友好),如 MyStatistics,实现如下静态属性:

public class MyStatistics
{
    public static float Stamina { get; set; }
    public static float Health { get; set; }
    public static float Speed { get; set; }
}

但不是从 MonoBehaviour 继承,所以您不需要将它附加到游戏对象,您只需使用它们的完整限定名称就可以在代码中的任何地方使用它

        //TODO : Go slower
        MyStatistics.Speed = 2f;
        MyStatistics.Stamina = 0f;

要永远记住的一件事是,在开始新游戏之前将这些数据重置为默认值,以防玩家死亡,否则他们会使用前一个游戏的数据开始新游戏,因为静态数据始终存在只要可执行文件是 运行.