Version: 6000.3
语言: 中文
Java/Kotlin 和 C# 代码支持的数据类型
将 Unity 集成到 Android 应用程序中

调用 Java/Kotlin 代码的最佳实践

了解调用 Java 和 Kotlin 的最佳实践插件在 Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。更多信息
请参阅术语表
C# 中的代码脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表
以提高应用程序的性能。

尽量减少 JNI 调用

通过高级或低级 C# API 使用 Java 本机接口 (JNI) 会占用大量资源,并且速度可能很慢。为了提高性能和代码清晰度,最佳做法是保持较低的 JNI 调用次数。

为了避免不必要的 JNI 调用,高级 C# API 会缓存您调用的每个 Java 方法的 ID。这意味着对同一方法的后续调用不会像第一次调用那样占用大量资源。呼叫不需要在同一帧内进行,甚至不需要来自同一帧AndroidJavaObject/AndroidJavaClass实例。如果您使用低级 API 并希望获得此性能优势,则必须手动缓存方法 ID。否则,最佳做法是使用高级 API。

注意:Unity 会维护缓存,直到应用程序关闭。这包括应用程序在后台时。

管理垃圾回收

最佳做法是包装AndroidJavaObjectAndroidJavaClass使用using语句,以确保 Unity 尽快销毁它们。如果您不使用using,Unity 的垃圾回收器仍将释放所有创建的实例,但您无法控制何时发生这种情况。

以下代码示例演示如何使用using以最佳方式访问系统语言的语句:

using UnityEngine;

public class LocaleExample : MonoBehaviour
{
    void Start()
    {
        using (AndroidJavaClass cls = new AndroidJavaClass("java.util.Locale"))
        using (AndroidJavaObject locale = cls.CallStatic<AndroidJavaObject>("getDefault"))
        {
            if (locale != null)
            {
                Debug.Log("current lang = " + locale.Call<string>("getDisplayLanguage"));
            }
        }
    }
}

其他资源

Java/Kotlin 和 C# 代码支持的数据类型
将 Unity 集成到 Android 应用程序中