全球项目变量

时间:2015-01-25 21:23:48

标签: c# unity3d

首先我想说,我知道使用static是使用全局变量的默认方法。但是,它对我不起作用。

我有这个(非常简单)的课程:

public class GameSettings
{
    public static Boss chosenBoss;
}

我根据用户输入从另一个类设置,例如:

using UnityEngine;
using System.Collections;

public class ChooseMort : MonoBehaviour
{
    public Boss mort;

    // Use this for initialization
    void Start ()
    {
    }

    // Update is called once per frame
    void Update ()
    {
    }

    void OnMouseOver(){
        if(Input.GetMouseButtonDown(0)){
            GameSettings.chosenBoss = mort;
            Application.LoadLevel("MainGame");
        }
    }
}

然后我尝试在主场景开始后访问此变量:

// Use this for initialization
void Start ()
{
    boss = GameSettings.chosenBoss;
    PositionBoss ();
    ...
}

然而,每当我到达boss = GameSettings.chosenBoss时,它总是null

我在研究并发现这篇文章之后也试过了SingletonsSingletons

但不幸的是,这些对我来说也不起作用。我担心我错过了一些非常简单的事情。谁能指出我出错的地方?

感谢。

1 个答案:

答案 0 :(得分:1)

您正在尝试引用GameSettings,就像它是静态类一样。即..

boss = GameSettings.chosenBoss;

GameSettings.chosenBoss = mort;

首先你需要实例化那个类才能使用它,因为你不使用静态类或单例...(这让我有点困惑,因为我不确定你为什么会这样做需要多个GameSettings ..)

反正,,

public class ChooseMort : MonoBehaviour
{
    public Boss mort;
    private GameSettings gameSettings;
    // Use this for initialization
    void Start ()
    {
        gameSettings = new GameSettings();
    }

    // Update is called once per frame
    void Update ()
    {
    }

    void OnMouseOver(){
        if(Input.GetMouseButtonDown(0)){
            gameSettings.chosenBoss = mort;
            Application.LoadLevel("MainGame");
        }
    }
}