我在 iOS 上使用 Unity 和自定义库。自定义库是一个数学库,具有一些线程和对 iOS DSP 函数的调用。如果我将该库与本机 iOS 应用程序一起使用,则该库的性能比在 Unity 下运行要好 2-3 倍。我怀疑 Unity 使用了大量的 CPU 周期,因此库的执行时间更长。
有没有办法可以在非常有限的时间内停止/暂停/暂停 Unity 功能,以便我可以优先考虑库执行?我可以让系统对用户输入不响应,并可能停止帧重新休息。如果这是不可能的,我可以采取哪些其他方法来提高我的表现。
谢谢,
您可以从 iOS 调用
UnityPause(true)
来暂停 Unity 播放器,但这实际上会“暂停”您的游戏并在 Unity 层中触发 OnApplicationPause(true) 。 我们对一些调用本机视图控制器的函数执行此操作。
Objective-C 中的声明如下所示:
// imports
void UnityPause(bool pause);
@implementation ClassName
// Implementation stuff here
只要声明,您就可以从任何地方拨打
UnityPause
。 但请记住,如果您有任何与 Unity 中的 OnApplicationPause
事件相关的功能,它将被执行。
如果您需要将数据传回 Unity,您可以创建一个从 Native 到 Unity 的回调,在触发时发送数据,但玩家显然必须运行才能“听到”回调。
另一个选项(我们将其用作某种 SDK)是创建一个 Bridge,其工作是获取调用并将回调推送到 C# 类。 C# 类将是一个
MonoBehaviour
,其工作是接收数据并以某种方式将其通过更新循环或协程传递给 Unity。 我无法分享我们用来执行此操作的代码,但我可以告诉您这是可能的。
@Evan 你能帮我实现 UnityPause(bool Pause) 吗?我希望它的工作方式与您描述的完全一样