ドキュメント

Unity Engine

Unity Engine

Java/Kotlin コードを呼び出すためのベストプラクティス

C# スクリプトから Java/Kotlin コードを呼び出すためのベストプラクティスについて説明します。
読み終わるまでの所要時間 4 分最終更新 1日前

C# スクリプトから Java および Kotlin プラグインコードを呼び出して、アプリケーションのパフォーマンスを向上させるためのベストプラクティスを紹介します。

JNI 呼び出しの最小化

JNI (Java ネイティブインターフェース) を高レベルまたは低レベルの C# API で使用すると、リソースに負荷がかかり、処理に時間がかかる場合があります。パフォーマンスを向上させ、コードの明確さを保つには、JNI 呼び出しの数を少なく抑えることがベストプラクティスです。
不要な JNI 呼び出しを避けるため、高レベル C# API は、呼び出した各 Java メソッドの ID をキャッシュします。つまり、同じメソッドの後続の呼び出しは、最初のコールほどリソースに負荷をかけません。コールは、同じフレーム内にある必要はなく、同じ
AndroidJavaObject
/
AndroidJavaClass
インスタンスから発信される必要もありません。低レベル API を使用してパフォーマンスを向上させる場合は、メソッド ID を手動でキャッシュする必要があります。そうでない場合は、高レベル API を使用するのがベスト プラクティスです。
注
Unity はアプリケーションを 閉じる までキャッシュを維持します。これには、アプリケーションが背景にある間も含まれます。

ガベージコレクションの管理

AndroidJavaObject
または
AndroidJavaClass
のインスタンスは、Unityができるだけ早く破棄できるように
using
ステートメントでラップするのがベスト プラクティスです。
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")); } } }}

追加リソース