1)我应该使用回调或通过使用 各个类别
调用函数的参考从手动调用的功能的直接速度更快,但是这不应该是一个问题的。它没有那么大的差别。
2)因为我传递了4个参数,其中一些参数是 在某些脚本中很有用,会不会有更多的垃圾收集?比 手动调用脚本方法?我通过 四个参数中的2个是参考类型,2个是值类型。
不,当您将更多参数传递给委托时,将不会有内存分配。内存分配的唯一时间是初始化变量onCutCB
时。例如,onCutCB = OnCut;
。这就是为什么onCutCB
必须在Start
或Awake
函数中初始化一次。当调用onCutCB
时,内存分配不会发生。
阅读下面的代码中的注释上看到内存分配与否:
Action<GameObject, GameState, GameObject, Vector3> onCutCB;
void OnCut(GameObject survivalObj, GameState state, GameObject
destroyObj, Vector3 startPos = default(Vector3))
{
}
void Start()
{
//MEMORY IS ALLOCATION
onCutCB = OnCut;
}
void Update()
{
//NO MEMORY ALLOCATION HERE
onCutCB(objToUse, gameState, anotherObj, thePos);
}
虽然当我玩我的游戏在移动设备上直到它 工作正常minitues但之后一些次滞后有点我使用的对象 pooling也当我重新启动游戏我的场景不加载我只使用 池,因为被实例化的gameobject是必需的。
您描述的这个问题与您的游戏的逐渐减速无关。您要么不间断地实例化许多对象,从Update
函数的每一帧开始一个协程,并且协程不会结束/停止或者合计执行时间的内容。
没有你的全部脚本,不可能告诉你是什么原因导致你的问题。请,不是用你的所有代码编辑你的问题。自己查找并解决问题。
使用Profiler!
转到的Windows - >探查然后启用深剖面并点击 “记录” 和clicl播放按钮。您将看到哪个脚本正在分配内存以及每个功能需要多少时间才能完成。看看这些并修复它。
Here是关于如何使用Profiler的完整教程。
衡量它并决定你的具体情况。无论如何,在99%的情况下,微观优化是邪恶的。尤其是当你决定一个OnGameOver函数时,它最有可能只发生一次,而不是每秒1000次... – walther
OnGameOver回调被称为每分钟5次,实际上我只是将名称更换为OnGameOver – sagar
一个会话在你的游戏持续12秒?为什么每分钟拨打5次OnGameOver?无论如何,为什么你想优化这个?你有什么问题吗?如果是的话,那么专注于它们而不是微观优化会更有益处。 – walther