3.Android调用Unity
3.1 知识点
Android调用Unity规则
想要被Android端调用的Unity函数:
- 需要写在继承MonoBehaviour的脚本中。
- 需要挂载在场景中处于激活状态的GameObject上。
交互时,在Android端调用API:
UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
注意:该API中的参数只能是String类型或者为null。
测试交互
在Unity端创建测试脚本,编写测试函数
using UnityEngine;
using UnityEngine.UI;
public class TestAndroidUnityInteraction : MonoBehaviour
{
public Text testAndroidCallUnityText;
public void TestAndroidCallUnity(string str)
{
testAndroidCallUnityText.text = str;
}
void Start()
{
using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
using (AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity"))
{
// 调用有返回值的成员函数
string testFunStr = androidJavaObject.Call<string>("TestFun");
}
}
}
}
在场景上创建一个空物体,将脚本挂载上去
在Android端书写测试代码
// 测试成员函数
public String TestFun()
{
// 在返回前可以尝试调用Unity的函数
// 交互时,在Android端调用API:
// UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
// 注意:该API中的参数只能是String类型或者为null
UnityPlayer.UnitySendMessage("Lesson03", "TestAndroidCallUnity", "AndroidCallUnity");
return "String";
}
重新打包aar包,替换原先插件文件夹下的aar文件,导入Unity中进行打包测试,注意要进行上节课的三次删除操作,重新生成应用程序,在模拟器测试
总结
Android调用Unity相对比较简单,在Android端使用 UnityPlayer.UnitySendMessage
API即可。
3.2 知识点代码
MainActivity
package com.tao.unityandroidtestgame;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
//测试成员变量
public int testI;
public static int testStaticI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
}
//测试成员函数
public String TestFun()
{
// 在返回前可以尝试调用Unity的函数
// 交互时,在Android端调用API:
// UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
// 注意:该API中的参数只能是String类型或者为null
UnityPlayer.UnitySendMessage("Lesson03", "TestAndroidCallUnity", "AndroidCallUnity");
return "String";
}
//测试静态函数
public static String TestStaticFun()
{
return "TestStaticFun";
}
}
Lesson03_Unity和Android交互教程
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Lesson03_Unity和Android交互教程 : MonoBehaviour
{
public Text testAndroidCallUnityText;
void Start()
{
#region 知识点一 Android调用Unity规则
//想要被Android端调用的Unity函数
//1.需要写在继承MonoBehaviour的脚本中
//2.需要挂载在场景中处于激活状态的GameObject上
//交互时,在Android端调用API:
// UnityPlayer.UnitySendMessage("对象名", "函数名", "参数信息")
// 注意:该API中的参数只能是String类型或者为null
#endregion
#region 知识点二 测试交互
//1.在Unity端创建测试脚本,编写测试函数
//2.在场景上创建一个空物体,将脚本挂载上去
//3.在Android端书写测试代码
//4.重新打包aar包,导入Unity中进行打包测试
using (AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))//com.unity3d.player.UnityPlayer是固定写法
{
using (AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity"))//currentActivity是固定写法 获取当前激活的Activity
{
//调用有返回值的成员函数
string testFunStr = androidJavaObject.Call<string>("TestFun");
}
}
#endregion
#region 总结
//Android调用Unity相对比较简单
//在Android端使用 UnityPlayer.UnitySendMessage API即可
#endregion
}
public void TestAndroidCallUnity(string str)
{
testAndroidCallUnityText.text = str;
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com