当另一个类变量更改而不是直接访问变量时,使用事件会更有效吗?安全怎么样?那些属性呢?

时间:2017-03-05 11:13:32

标签: c# performance unity3d unity5

我尽可能地简化情况:

第1课:

public class GameFlowManager { 
    public float worldSpeed;
}

第2课:

public class Clouds {
    void MoveClouds(float worldSpeed){...}

我需要从worldSpeed访问Clouds 哪种方式更有效?

  • 使用GameFlowManager gfm = FindObjectOfType<GameFlowManager>() 然后通过指针访问变量(我知道它不是真的 指针,但它的目的是相同的)
    像这样:gfm.worldSpeed
  • 或者我应该使用一个事件,它调用了一个setter函数 需要worldSpeed的课程?这样我就不用了 变量public。

现在这只是为了统一,当我不能使用属性时。在简单的C#代码中,我可以使用getter而不会产生任何后果,对吗?

1 个答案:

答案 0 :(得分:2)

对于以“Manager”结尾的所有内容(意味着可能只有一个),您应该使用Singleton模式,如下所示:

class GameFlowManager
{
    public static GameFlowManager Instance {get; private set;}

    public float worldSpeed{get; set;} // You could make the setter private to prevent other classes from modifying it if necessary

    void Awake()
    {
        Instance = this; // Note that this requires an object of type GameFlowManager to already exist in your scene. You could also handle the spawning of this object automatically to remove this requirement.
    }

    ...
}

然后,只要你需要这个类的值,你就可以:

GameFlowManager.Instance.worldSpeed

此解决方案非常理想。

编辑:谁说你不能在统一中使用属性?