AS 和 Unity 之间如何通信。AS 和 Unity 之间通信的方法介绍如下: 将AS中的扩展功能制作成 Android 库文件(jar包或者aar),然后将jar/aar包导入到 Unity 中直接使用 下面我将分两步介绍如何利用第二种方法实现AS 和 Unity 之间的通信 第一部分Android Studio需要做的工作 1.创建正常 Android Studio 库工程 首先创建一个Android Studio 项目 build.gradle文件修改 Unity classes.jar拷贝到项目中libs文件夹中 找到安装的Unity文件夹,找到 途中的的classes.jar,然后将jar放到项目中libs目录下,另外Unity中有mono和il2cpp两个文件夹,这两个文件夹下都有classes.jar,具体选用大家要看你们unity 中playerSettings 中的配置 注意:build.gradle中的 target api 要和player setting中的要一致否则也会报错 要么选自动,要选具体的API值就要和build.gradle中的 target api一致 然后进行导入和设置编译范围 选中刚粘贴的classes.jar文件,右键,选择 Add as Library,出现一个弹窗口,选中自己的库模块后直接点确定 classes.jar 编译范围设置 设置后目录列如下: 删除AS 项目中res中的资源,否则Unity编译会报错 以上图片选中的均删除掉即可 AndroidManifest.xml修改 2 AS中代码添加 import android.content.Intent; import android.util.Log; import android.widget.Toast; import android.os.Bundle; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate(Bundle savedInstanceState) { } //Unity 调用 Android public void UnityCallAndroid (int a,String str) { Toast.makeText(this,“unity调用android成功 a==”+a+" str=="+str, Toast.LENGTH_LONG).show(); AndroidCallUnity(a,str); } //Android 调用 Unity public void AndroidCallUnity (int a,String str) { //第1个参数为Unity场景中用于接收 Android 消息的对象名称 //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制) //第3个参数为unity方法的参数 Toast.makeText(this,“Android 调用 Unity 成功”, Toast.LENGTH_LONG).show(); UnityPlayer.UnitySendMessage(" receiveObj", “UnityMethod”, “This is args a=”+a+" str="+str); } } 第二部分Unity的实现 1.将AS中编译的aar放到如下图中的文件夹 其中,AndroidManifest.xml 是从aar中解压出来的,具体方法是将编译出来的aar拷贝一份然后,改后缀为 zip文件后解压,拉出AndroidManifest.xml,然后再将AndroidManifest.xml,aar一起放到在Asset下新建的Plugins/Android文件夹下 2.创建一个Panel,里面放一个Image或者Button 和 Text Image或者Button 名字要和如下方法的第一个参数名字要一致,可以自己自定义名字,我用的是receiveObj和UnityMethod UnityPlayer.UnitySendMessage(" receiveObj(自定定义)", “UnityMethod(自已定义)”, “This is args a=”+a+" str="+str(自己的参数)); 3.给Image或者Button 挂载C# 脚本与AS交互 挂在详情我就不写了,这个比较简单直接拖动就可以了 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class SDKTest : MonoBehaviour { private AndroidJavaObject jo; public Text text; // Start is called before the first frame update void Start() { jc = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”); jo = jc.GetStatic(“currentActivity”); } //Unity 调用 Android 中的方法 UnityCallAndroid, //将其方法绑定在Unity中的Button或者Image上,点击Button和Image就实现交互了 public void OnBtnClickHandler() { } // 被Android中AndroidCallUnity调用 public void UnityMethod(string str) { text.text = str; } 脚本挂载 最后就可以打包运行了,将编译出来的apk 安装到Android手机上看看运行效果,不能直接在 Unity 上跑哦,必须在手机上跑哦!!!! |
|