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

问题描述 投票:0回答:2

我在 iOS 上使用 Unity 和自定义库。自定义库是一个数学库,具有一些线程和对 iOS DSP 函数的调用。如果我将该库与本机 iOS 应用程序一起使用,则该库的性能比在 Unity 下运行要好 2-3 倍。我怀疑 Unity 使用了大量的 CPU 周期,因此库的执行时间更长。

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

谢谢,

unity-game-engine
2个回答
1
投票

您可以从 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。 我无法分享我们用来执行此操作的代码,但我可以告诉您这是可能的。


0
投票

@Evan 你能帮我实现 UnityPause(bool Pause) 吗?我希望它的工作方式与您描述的完全一样

© www.soinside.com 2019 - 2024. All rights reserved.