Application.platform == RuntimePlatform.Android无法正常工作

时间:2018-12-05 23:05:05

标签: unity3d unity-container unityscript

就像我在另一个问题中所说的那样,没有人回答:

Touch not working on Unity on my Android device

我发现我的应用无法正常工作的问题是以下行:

if (Application.platform == RuntimePlatform.Android) {

} 

如果我删除了该条件,则该应用程序会按应有的方式工作,但是一旦我将其重新添加,它就无法正常工作。

1 个答案:

答案 0 :(得分:1)

按照您的帖子,我做了一个实验。

首先,我尝试在Remote 5上运行以下代码,并将其分别作为单独的应用程序运行。

void Update () {
    Debug.LogFormat ("Application.platform: {0}", Application.platform.ToString ());
}

在Remote 5应用上,控制台将打印:

Application.platform: OSXEditor

在单个应用程序上,控制台将打印:

Application.platform: Android

显然,Application.platform在Unity Remote 5上无法正常工作,因此,将它们放在if语句中时,代码将无法工作。实际上,您的代码无需使用Remote 5即可完美运行。

有两种解决方法:

  1. 请勿使用Unity Remote 5测试您的应用程序。尽管这是一种测试游戏的简便方法,但有时在将应用程序部署到真实设备上时却无法按预期工作。

  2. 使用Platform dependent compilation。我建议您使用它在不同平台上开发游戏。正如RuntimePlatform文档所建议的:

  

使用RuntimePlatform与依赖于平台的编译之间的区别在于,在运行时评估使用RuntimePlatform,而在编译时评估与平台相关的编译。因此,如果您可以使用依赖于平台的编译,请立即使用它。在大多数情况下,您可以同时使用这两种功能,并且使用define可以生成更小,更快的代码,因为您无需在运行时进行检查。在某些情况下,运行时需要RuntimePlatform。

这是一个仅在具有平台相关标志的Android平台上运行代码的示例。

    void Update () {
#if UNITY_ANDROID && !UNITY_EDITOR
        // Run your Android only code here.
#endif
    }