我在iOS上使用与自定义库的统一。自定义库是一个数学库,带有几个线程并调用iOS的DSP函数。如果我使用带有原生iOS应用程序的库,那么与在Unity下运行相比,库的性能要好2-3倍。我怀疑,统一使用了很多CPU周期,因此库执行时间更长。
有没有办法可以在非常有限的时间内停止/暂停/暂停Unity功能,以便我可以优先执行库执行?我可以让系统不响应用户输入,也可能停止帧恢复。如果这是不可能的,我可以采取哪些其他方法来提高我的表现。
THX,
答案 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。我无法分享我们用来执行此操作的代码,但我可以告诉您这是可能的。