我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第1篇文章,点击查看活动详情
前序
使用工具为Unity2020.3.20f1和Android Studio2020.3.1,关于两个软件的安装、配置不再赘述。
1、Android
1.1 新建项目
(1)File->New->New Project
(2)选择Empty Activity ,Next
(3)配置项目名、包名、路径、编程语言、SDK版本,点Finish,等待项目创建完
1.2 创建一个Android Library
(1)右键,New,Module
(2)设置好Library名字,Next,选择Empty Activity就好
1.3 编写Java代码
(1)创建一个java类
(2)编写代码如下:
package com.mine.androidlibrary;
import android.app.Activity;
import android.widget.Toast;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Unity2Android{
private Activity mUnityActivity;
private String gameObjectName;
private String functionName;
private Activity getUnityActivity()
{
if(mUnityActivity == null)
{
try
{
Class<?> classType = Class.forName("com.unity3d.player.UnityPlayer");
mUnityActivity = (Activity) classType.getDeclaredField("currentActivity").get(classType);
}
catch (ClassNotFoundException e) {}
catch (IllegalAccessException e) {}
catch (NoSuchFieldException e) {}
}
return mUnityActivity;
}
public void showMessage(String message)
{
Toast.makeText(getUnityActivity(), message, Toast.LENGTH_SHORT).show();
//测试向Unity发消息
sendMessage2Unity("Android已经接到消息啦!");
}
//初始化Unity接收消息的配置,Unity调用
private void init(String gameObjectName, String functionName)
{
this.gameObjectName = gameObjectName;
this.functionName = functionName;
}
//给Unity发消息
private boolean sendMessage2Unity(String message)
{
if(gameObjectName == null || gameObjectName.equals("") || functionName == null|| functionName.equals(""))
{
return false;
}
try
{
Class<?> classType = Class.forName("com.unity3d.player.UnityPlayer");
Method method =classType.getMethod("UnitySendMessage", String.class,String.class,String.class);
method.invoke(classType,gameObjectName,functionName,message);
return true;
}
catch (ClassNotFoundException e) {}
catch (NoSuchMethodException e) {}
catch (IllegalAccessException e) {}
catch (InvocationTargetException e) {}
return false;
}
}
1.4 导出aar包
(1)选中Module,Build,Rebuild Project
(2)可在文件夹中找到aar
2、Unity
1.1 新建Unity项目
这部分就不在多说了,创建一个Unity工程即可。
1.2 导入aar包
1.3 编写C#脚本
(1)新建一个脚本,并在场景中新建一个空物体,将脚本挂在空物体上。
(2)编写脚本,如下
using UnityEngine;
using UnityEngine.UI;
public class MessageCenter : MonoBehaviour
{
/// <summary>
/// 发送消息按钮
/// </summary>
[SerializeField] private Button btnSend;
/// <summary>
/// 接收安卓返回的消息
/// </summary>
[SerializeField] private Text textMessage;
/// <summary>
/// 安卓对象
/// </summary>
private AndroidJavaObject androidJavaObject;
private void Awake()
{
androidJavaObject = new AndroidJavaObject("com.mine.androidlibrary.Unity2Android");
}
private void Start()
{
//调用初始化方法
androidJavaObject.Call("init", "MessageCenter", "MessagesReceiver");
btnSend.onClick.AddListener(SendMessage2Android);
textMessage.text = "waiting... ...";
}
/// <summary>
/// 向安卓发消息
/// </summary>
private void SendMessage2Android()
{
androidJavaObject.Call("showMessage", "Hello Android, this is Unity!");
}
/// <summary>
/// 消息接收
/// </summary>
/// <param name="message">消息内容</param>
private void MessagesReceiver(string message)
{
textMessage.text = message;
}
}