【问题标题】:Reseting a static variable back to zero when loading a scene unity加载场景统一时将静态变量重置为零
【发布时间】:2017-08-23 15:29:38
【问题描述】:

我有一个问题,我必须使用静态变量,因为如果我不使用它,如果我使用普通变量,即使我点击游戏对象 3 次,它总是打印(在我 debug.log 的位置)1。它可以工作,但是当我重新加载/加载新场景时,场景变量保持不变,例如 2,但我需要它为 0。 基本上它工作正常,我只需要在再次加载当前场景后重置变量。

public static int end;

    void OnMouseDown(){
        end +=1;
        Debug.Log (end);
        if (end == 1)  {
            Vector2 pos1 = new Vector2 (-6,0);
            Instantiate (Redstar,pos1,Quaternion.identity);
        }
        else if ( end == 2 ) {
            Vector2 pos2 = new Vector2 (-5,0);
            Instantiate (Redstar, pos2,Quaternion.identity);
        }
        else if ( end ==3 ) {
            Vector2 pos3 = new Vector2 (-4,0);
            Instantiate (Redstar, pos3,Quaternion.identity);
            GameObject.Find ("ballon").SendMessage ("Finnish");
        }



    }

【问题讨论】:

  • 你使用的是单例脚本吗?
  • 我试过了,但没用。你能写给我吗?如果您认为它有效,也许我犯了一个错误
  • 如果您没有在脚本中使用 DontDestroyOnLoad 函数,那么 @Woltus 的技巧就可以完成这项工作。
  • 你到底要什么?不是很清楚。

标签: c# unity3d unity2d


【解决方案1】:

如果在MonoBehaviour中使用静态变量,基本上需要分别声明和初始化,初始化放入Awake()或Start()。否则,当 MonoBehaviour 在场景加载时重新初始化时,它们将保持其旧值,并且在加载场景时会遇到问题。

【讨论】:

    【解决方案2】:

    将一个空的 GameObject 添加到场景中并使用此代码添加脚本:

    void Start(){
        YourClass.end = 0;
    }
    

    YourClass 是包含问题代码的脚本。

    【讨论】:

    • 它现在不起作用我的变量 debug.log(end) 总是 1
    猜你喜欢
    • 2022-11-15
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多