访问变量时是否会有性能影响。参数在c#unity3d
问题描述:
我很抱歉,如果这个问题被问到,因为这可能很简单,或可能是答案是显而易见的。访问变量时是否会有性能影响。参数在c#unity3d
你好,在我的游戏中有几行代码,其中每个参考都是从单个类的GameManager.cs
得到的。
例如:
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()
{
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();
}
请问上面的代码,因为我使用对性能有任何影响。到 在几个地方访问变量和函数。
表现会略更好我建议代码的版本(因为它并不需要保持“抬头” instance
和healthController
) - 自local variables are faster。但在实践中,很可能你会注意到它是非常。
答
我是否需要进行任何更改以改进编码风格和性能 (如果有)?
否。你的代码看起来很好。如果需要它的一个实例,那就这样做。它会不是影响你的游戏性能。
你应该担心访问另一个脚本什么是反复做GetComponent<HealthController>()
或GameObject.FindXXX()
找到脚本,而不是缓存他们,但你不这样做,那么它的罚款。
答
是的,我认为你可以在方法级别中声明变量'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();
}