我有两个需要实现的功能:
两者都必须在Update()
中,我可以合并它但我更喜欢在每个Movement.cs and Rotation.cs
的单独脚本中使用它们。
所以我有两种方法:
Update()
。Update()
。我的问题:如果将它们分成每个人
Update()
而不是在一个脚本中与一个Update()
合并,是否会降低性能。
两个脚本都将附加在一个对象上,所以如果我有数百个对象。
Method 1
- 100个对象和100个带Update()
的脚本。
Method 2
- 100个对象和200个带Update()
的脚本。
另一个问题:
Method 2
真的很糟糕吗?
答案 0 :(得分:4)
这是微优化的一个案例。你应该使用在你的特定情况下更有意义的任何方法,在你完成之后你应该进行一些分析。
根据分析结果,您最终会知道优化的位置和内容。
回到手头有2个更新的问题将花费你每帧多一次函数调用以及首次加载MonoBehavi的时间,但这可以忽略不计,你会吃更多代码其他部分的CPU周期。
答案 1 :(得分:2)
如果你可以结合,那就去做吧。 Unity MonoBehaviours非常有用,但可以快速占用您的资源,特别是如果您有许多脚本同时运行。
查看此博客凭证:https://blogs.unity3d.com/2015/12/23/1k-update-calls/
你应该做什么?
当然这一切都取决于你的项目,但是在现场看到场景中使用大量GameObjects的游戏并不罕见,每个游戏都在每帧执行一些逻辑。通常它只是一些似乎没有影响任何东西的代码,但是当数量变得非常大时,调用数千个Update方法的开销开始变得明显。
答案 2 :(得分:2)
也许第三个选项对你来说会更好,它详细说明了第一个选项,但仍然将你的逻辑分成两个独立的区域,从而实现了你最初的松散耦合。
public static class Manipulators
{
public static void Rotate(MonoBehaviour behaviour, float amount)
{
Transform t = behaviour.GetComponent<Transform>();
// Do stuff with t
}
public static void Move(MonoBehaviour behaviour, float amount)
{
Transform t = behaviour.GetComponent<Transform>();
// Do stuff with t
}
}
然后在你的monobehaviour ......
public void Update()
{
Manipulators.Rotate(this, 15f);
Manipulators.Move(this, 15f);
}
答案 3 :(得分:0)