小编G_B*_*G_B的帖子

Unity3d 我应该缓存 AndroidJavaObject 实例吗?

我正在为 Unity3D 游戏创建简单的 Android 插件来显示吐司和本机弹出窗口。当我想从 Java 类调用方法时,我使用 AndroidJavaClass 和 AndroidJavaObject,就像在 Unity 文档中一样:

        AndroidJavaObject bridge = new AndroidJavaObject(CLASS_NAME);
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
        AndroidJavaObject act = jc.GetStatic<AndroidJavaObject>("currentActivity"); 
        act.Call("runOnUiThread", new AndroidJavaRunnable(() =>
        {
            bridge.CallStatic(methodName, args);
        }));
Run Code Online (Sandbox Code Playgroud)

Unity 文档(https://docs.unity3d.com/Manual/AndroidJARPlugins.html “在 Unity 中使用 Java 插件时的最佳实践”)建议使用 using 语句,例如

using (AndroidJavaClass cls = new AndroidJavaClass("java.util.Locale")) { 
    using(AndroidJavaObject locale = cls.CallStatic<AndroidJavaObject>("getDefault")) { 
        Debug.Log("current lang = " + locale.Call<string>("getDisplayLanguage")); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

但表示这是“计算成本高的方法”。

问题:我是否应该缓存 AndroidJavaClass 和 AndroidJavaObject 的实例?

感谢您的回答

c# unity-game-engine

3
推荐指数
1
解决办法
837
查看次数

标签 统计

c# ×1

unity-game-engine ×1