【问题标题】:Will there be performance effect with accessing variables with . parameter in c# unity3d使用 . 访问变量是否会对性能产生影响? c# unity3d 中的参数
【发布时间】:2017-08-26 14:21:30
【问题描述】:

如果有人问这个问题,我很抱歉,因为这可能很简单,或者答案很明显。

您好,在我的游戏中有几行代码,其中每个引用都来自 GameManager.cs,这是一个单例类。

例如:

public void someFunction()
{
    int a = GameManager.instance.healthController.something_1;
    GameManager.instance.healthController.updateHealth();
    GameManager.instance.healthController.updateArrows();
    GameManager.instance.healthController.updateRange();
} 

上面的代码是否会对性能产生任何影响,因为我使用的是 .在多个地方访问变量和函数。

如果有的话,我是否需要进行任何更改以改进编码风格和性能?

【问题讨论】:

    标签: c# oop unity3d singleton


    【解决方案1】:
    public void someFunction()
    {
        int a = GameManager.instance.healthController.something_1;
        GameManager.instance.healthController.updateHealth();
        GameManager.instance.healthController.updateArrows();
        GameManager.instance.healthController.updateRange();
    } 
    

    可以改写为:

    public void someFunction()
    {
        var controller = GameManager.instance.healthController;
        int a = controller.something_1;
        controller.updateHealth();
        controller.updateArrows();
        controller.updateRange();
    } 
    

    上面的代码是否会对性能产生任何影响,因为我使用的是 .至 在多个地方访问变量和函数。

    使用我建议的代码版本,性能会稍微更好(因为它不需要继续“查找”instancehealthController) - 因为 @987654321 @。但在实践中,您非常不太可能注意到它。

    【讨论】:

      【解决方案2】:

      我是否需要进行任何更改以改进编码风格和性能 有的话?

      。你的代码看起来不错。如果需要它的一个实例,那么就这样做。它不会影响您的游戏性能。

      您应该担心访问另一个脚本重复执行GetComponent<HealthController>()GameObject.FindXXX() 来查找脚本而不是缓存它们,但您没有这样做,所以很好。

      【讨论】:

        【解决方案3】:

        是的,我认为您可以在类级别从方法中声明变量“a”。然后避免每次调用该方法时都创建变量。

        这是游戏编程的好习惯。

            private int a;
            public void someFunction()
            {
                a = GameManager.instance.healthController.something_1;
                GameManager.instance.healthController.updateHealth();
                GameManager.instance.healthController.updateArrows();
                GameManager.instance.healthController.updateRange();
            } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-02
          • 1970-01-01
          • 1970-01-01
          • 2014-10-16
          • 2011-05-21
          • 1970-01-01
          相关资源
          最近更新 更多