Unity与Android交互通信
最近在研究Unity与Android通信的方法,网上也看了很多相关帖子,记录一下自己的研习所得,如有所言不到之处欢迎指正。
软件版本1.Android Studio 3.4.1
2.Unity 2018.4.0f1
流程1.打开Android Studio,创建一个新项目。
2.选择Empty Activity,点击Next
3.项目配置界面:
Name:项目名称
Package name:包名
Save location:项目路径(注意不要有中文)
Minimum API level:支持最低Android 版本(根据自己项目需求定)
点击Finish
4.项目结构目录如图所示:
5.创建一个新的模块:右键app -> New -> Module(弹出Create New Module界面)
6.选择Android Library,点击Next
7.修改模块的名字:MyFirstLibrary,包名可以不用修改,点击Finish
8.完成之后出现如下新的模块:myfirstlibrary
9.双击打开app目录下的manifests文件夹下的AndroidManifest.xml文件,并把内容复制到myfirstlibrary目录下的manifests文件夹下的AndroidMainfest.xml文件中,如下图会有一些错误,先不用管。
10.右键com.shuo.myfirstlibrary -> New -> Java Class,创建新的类
11.Name:CustomActivity(任意名字),点击OK
12.左侧目录结构会出现一个CustomActivity文件,同时右侧会自动打开此文件
13.接下来导入Unity的Class.jar包,找到Unity版本的安装路径,打开到如下文件夹(可能Unity安装的版本/位置不一样,路径会有差异)
14.这里有两个文件夹,我们打开Unity,打开Player Setting界面,如下ScriptingBackend选项:Mono/IL2CPP两个选项,设置自己需要的,这里我用默认的Mono
15.我们再回到刚才的路径下面,根据自己的设置选择正确的路径,我选择mono下的classes.jar,复制
16.回到Android Studio 项目,点击Android -> Project,切换到Project目录
17.在myfirstlibrary下面有一个libs文件夹,右键Paste,把刚刚的classes.jar复制过来,弹出一个Copy视图框,点击OK
18.在刚刚导入的classes.jar文件右键Add As Library...,在弹出的Create Library视图框选择myfirstlibrary,点击OK
19.打开CustomActivity,做如下修改:
package com.shuo.myfirstlibrary;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;
public class CustomActivity extends UnityPlayerActivity {
private final static String UNITY_GAMEOBJECT = "AndroidPlugin";
private final static String UNITY_FUNCTION = "GetMessageFromAndroid";
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
private void ReceiveMessageFromUnity(String message){
//一个信息提示框
Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
SendMessageToUnity("这是一个Android返回的信息内容!");
}
private void SendMessageToUnity(String message){
UnityPlayer.UnitySendMessage(UNITY_GAMEOBJECT,UNITY_FUNCTION,message);
}
}
20.打开myfirstlibrary目录下的manifests文件夹下的AndroidMainfest.xml文件,做如下修改:
21.选择myfirstlibrary文件夹,菜单栏Build -> Make Module 'myfirstlibrary',等待build完成
22.按照如下目录,找到myfirstlibrary-debug.aar文件,右键Show in Explorer
23.打开文件夹,找到myfirstlibrary-debug.aar文件,修改后缀名为myfirstlibrary-debug.rar,并解压缩出来
24.打开myfirstlibrary-debug文件夹,里面的目录结构如下,我们只需要classes.jar和AndroidManifest.xml文件
25.打开Unity,创建Plugins文件夹,并创建Android子文件夹,在Android文件夹里面创建libs文件夹,并分别把AndroidManifest.xml文件拖入Android,把classes.jar拖入libs文件夹
26.在Unity中创建如下:
AndroidPlugin:空Game Object就行,用来接收从Android返回过来的消息,名字必须与AndroidStudio项目中的名字一致。
Button_SendMessage:点击发送消息到Android的按钮。
Text_ReceiveMessage:接收Android返回过来的消息并显示。
27.新建脚本Game Manager,并挂到AndroidPlugin上面,代码如下
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public Text Text_ShowMessage;
///
/// 外部按钮调用
///
public void SendMessageToAndroid()
{
AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject javaObject = javaClass.GetStatic("currentActivity");
//此处"ReceiveMessageFromUnity"必须与AndroidStudio项目中的方法名字一致
javaObject.Call("ReceiveMessageFromUnity", "这是一个从Unity发送的消息内容!");
}
///
/// 接收Android返回的消息方法,必须与AndroidStudio项目中的名字一致
///
///
public void GetMessageFromAndroid(string message)
{
Text_ShowMessage.text = message;
}
}
28.Button_SendMessage按钮添加点击事件(GameManager.SendMessageToAndroid),把Text_ReceiveMessage拖入GameManager中,如下图
29.打包apk,包名/项目名自己按规定设置,最后进行真机测试,如下发送和接收消息都正常
项目链接https://github.com/YangGuangShuo/MyFirstUnity2Android
结语此篇文章只是个人见解,如有任何问题,可在下方留言。
作者:朔__朔
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341