枚举值似乎并不持久

时间:2019-05-04 19:47:34

标签: c# unity3d

我正在开发游戏,并且尝试通过按钮设置难度。因此,我有三个按钮,分别是“简单”,“中等”,“困难”,当然,当您单击设置困难的那个按钮时。

问题是,即使我的难度似乎已经确定,但在游戏开始时却是不正确的。 请在下面查看我的代码。

public enum GameDifficulty
{
    Test,
    Easy,
    Medium,
    Hard
}
internal GameDifficulty Mode;//= GameDifficulty.Easy;

public void setToTest()
{

    Mode = GameDifficulty.Test;
}

public void setToEasy()
{
    Mode = GameDifficulty.Test;
}

public void setToMedium()
{
    Mode = GameDifficulty.Medium;
}

public void setToHard()
{
    Mode = GameDifficulty.Hard;
    Debug.Log("sET TO Hard");
}


//[Information("Selece Game Mode", MoreMountains.Tools.InformationAttribute.InformationType.Info, false)]
/// Set Variables based on selected mode
    // public motionDirections motionState = motionDirections.Vertical;

// Use this for initialization
void Start () {

    var storm = stormHerald.GetComponent<WindEffect>();
    Debug.Log(Mode);
    switch (Mode)
    {
        case GameDifficulty.Test:

现在,当我单击“硬按钮”时,我得到了已将其设置为“硬”的调试信息,但是,在启动调试时,表明它实际上已被设置为测试。我认为这是因为我的“模式”变量已定义,但我无法解决。

感谢您的协助。

2 个答案:

答案 0 :(得分:1)

问题在这里:

  

internal GameDifficulty Mode;//= GameDifficulty.Easy;

在这里:

  

Debug.Log(Mode);

我没有看到Debug.Mode变量的任何初始化。在评论中,您说您将其设置为easy,但是您怎么知道呢?我看不到有这样做的作业。

修改代码为

internal GameDifficulty Mode=Test;//= GameDifficulty.Easy;

(或Easy或其他)应该解决此问题。

答案 1 :(得分:1)

我没有确切地看到问题所在,但对代码应该做什么产生了误解。

Mode未初始化,并获取枚举的默认值,在这种情况下,它是第一个可能的值。请参阅此处以获取更多枚举文档:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/enum

按这些按钮将不会使模式状态保持不变。您必须记住,如果您希望状态保持不变,则必须保存它。一种方法是通过播放器设置:https://docs.unity3d.com/2019.1/Documentation/Manual/class-PlayerSettings.html

如果您在赛前模式下按下这些按钮,那么该状态将不会转移或保留到最终产品或游戏模式,因为每次我们重新编译时都会重新加载类(这必须理解为简化了Unity在幕后所做的事情。