包含此页的版本:
不含此页的版本:
Unity 提供高级 API,例如AndroidJavaObject,AndroidJavaClass,AndroidJavaProxy和AndroidApplication允许您从 C# 与 Java/Kotlin 代码进行交互脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间修改组件属性以及以您喜欢的任何方式响应用户输入。更多信息
请参阅术语表.
以下代码示例演示了如何使用这些 API。
以下代码示例创建使用字符串初始化的 java.lang.String 实例,并检索该字符串的哈希值。
using UnityEngine;
public class JavaExamples
{
public static int GetJavaStringHashCode(string text)
{
using (AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", text))
{
int hash = jo.Call<int>("hashCode");
return hash;
}
}
}
此示例:
AndroidJavaObject表示 java.lang.String。AndroidJavaObjectconstructor 至少接受一个参数,该参数是要构造实例的类的名称。类名后面的任何参数都用于对对象的构造函数调用,在本例中text参数从GetJavaStringHashCode.int泛型类型参数Call因为hashCode()以整数形式返回哈希码。
注意:不能使用点表示法来实例化嵌套的 Java 类。必须使用分隔符来实例化内部类。例如,使用$android.view.ViewGroup$LayoutParams或android/view/ViewGroup$LayoutParams,其中LayoutParams类嵌套在ViewGroup类。
以下代码示例使用AndroidApplication类。
using UnityEngine;
using UnityEngine.Android;
public class JavaExamples
{
public static string GetApplicationCacheDirectory()
{
using var javaFile = AndroidApplication.currentActivity.Call<AndroidJavaObject>("getCacheDir");
var cacheDirectory = javaFile.Call<string>("getCanonicalPath");
return cacheDirectory;
}
}
此示例:
AndroidApplication.currentActivity以访问当前的 Android Activity,而无需显式创建AndroidJavaClass或AndroidJavaObject实例。注意:此示例仅供参考。相反,要访问应用程序的缓存和文件目录,请使用 Application.temporaryCachePath 和 Application.persistentDataPath API。
以下代码示例展示了如何使用UnitySendMessage.
using UnityEngine;
using UnityEngine.Android;
public class JavaExamples : MonoBehaviour
{
private void Start()
{
AndroidJNIHelper.debug = true;
AndroidApplication.unityPlayer.CallStatic("UnitySendMessage", "My GameObject", "JavaMessage", "NewMessage");
}
private void JavaMessage(string message)
{
Debug.Log("message from java: " + message);
}
}
此示例:
AndroidApplication.unityPlayer访问活动使用的 Java 实例,而无需显式创建AndroidJavaClass实例。UnitySendMessage方法,该方法属于com.unity3d.player.UnityPlayer.尽管您调用UnitySendMessage在 Unity 中,它使用 Java 中继消息,然后调用本机/Unity 代码将其传递给游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表叫My GameObject它有一个附加的脚本,其中包含一个名为JavaMessage.