暂停Unity暂时在后台进行一些数学处理

时间:2014-10-21 09:06:42

标签: unity3d

我在iOS上使用与自定义库的统一。自定义库是一个数学库,带有几个线程并调用iOS的DSP函数。如果我使用带有原生iOS应用程序的库,那么与在Unity下运行相比,库的性能要好2-3倍。我怀疑,统一使用了很多CPU周期,因此库执行时间更长。

有没有办法可以在非常有限的时间内停止/暂停/暂停Unity功能,以便我可以优先执行库执行?我可以让系统不响应用户输入,也可能停止帧恢复。如果这是不可能的,我可以采取哪些其他方法来提高我的表现。

THX,

1 个答案:

答案 0 :(得分:1)

您可以从iOS调用UnityPause(true)来暂停统一播放器,但这会“暂停”您的游戏并在Unity层触发OnApplicationPause(true)。我们这样做是为了调用本机视图控制器的一些函数。

声明在Objective-C中如下所示:

    // imports
    void UnityPause(bool pause);

    @implementation ClassName
    // Implementation stuff here

只要宣布UnityPause,您就可以从任何地方致电OnApplicationPause。但请记住,如果您有任何功能与Unity中的MonoBehaviour事件相关联,则会执行该功能。

如果你需要将数据传回Unity,你可以创建一个从Native到Unity的回调,它在触发时发送数据,但是玩家显然必须运行才能“回听”回调。

另一个选项(我们用作一种SDK)是创建一个Bridge,其工作是获取调用并将回调推送到C#类。 C#类将是{{1}},它的工作是接收数据并在更新循环或协程上以某种方式将其传递给Unity。我无法分享我们用来执行此操作的代码,但我可以告诉您这是可能的。