① 在Android Studio新建一个工程,然后新建一个Module(Android Library)
工程Module取名
"cn.ololee.unityplugin"
Min SDK 最好指定API22,因为unity的默认的Min API 是22
②新建一个类PluginInstance
其对应的demo:
public class PluginInstance {
public int add(int a, int b) {
return a + b;
}
public static Activity unityActivity;
public static void receiveUnityActivity(Activity activity) {
unityActivity = activity;
}
public void toast(String msg) {
Toast.makeText(unityActivity.getApplication().getApplicationContext(), msg, Toast.LENGTH_SHORT)
.show();
}
}
③ Build module & Generate aar
点击build module 生成debug的aar
其生成的aar将在工程对应的module dir(unityplugin)下的build/outputs/aar/
④保存aar到Unity工程
在我们的unity工程中,在Assets目录下新建一个Plugins的文件夹,在Plugins文件夹下继续新建一个Android的文件夹,然后将aar文件扔到这里面去
⑤使用aar
在层级中新建两个按钮 Add & Toast
新建一个C# Script
public class AndroidPlugin : MonoBehaviour
{
private AndroidJavaClass unityClass;
private AndroidJavaObject unityActivity;
private AndroidJavaObject _pluginInstance;
void Start()
{
//这里指定的就是之前的android 项目中的 包名 + 类名
InitializePlugin("cn.ololee.unityplugin.PluginInstance");
}
void Update()
{
}
void InitializePlugin(string pluginName)
{
/*
新建 一个unityplayer 的 java class对象,其类名为com.unity3d.player.UnityPlayer
这个class 有个静态属性,叫currentActivity,意为 当前活动 (游戏所在活动)
然后通过反射调用便得到了该活动
通过new AndroidJavaObject 可以获得一个我们自己的类PluginInstance 的对象
然后通过反射receiveUnityActivity,为Toast的Context赋值,这里其实有其他方式获得context[可以参考 blankJ的各种 Utils]
*/
unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
_pluginInstance = new AndroidJavaObject(pluginName);
if (_pluginInstance == null)
{
Debug.Log("=============== Plugin not found");
}
_pluginInstance.CallStatic("receiveUnityActivity", unityActivity);
}
/*
Add方法和toast方法都是反射我们java的方法而已
*/
public void Add()
{
if (_pluginInstance != null)
{
var result = _pluginInstance.Call<int>("add", 1, 2);
Debug.LogFormat("=============== result:{0}", result);
}
}
public void Toast()
{
if (_pluginInstance != null)
{
_pluginInstance.Call("toast", "Hi From Unity!!!");
}
}
}
UnityPlayer的源码:
其源码位置可以在unity的安装包的editor下找到 D:\unity\2022.1.15f1c1\Editor\Data\PlaybackEngines\AndroidPlayer
点击Toast按钮便可以调用android的方法了
⑥ 写在最后:
接下来会介绍如何在Unity android Client下使用自定义Activity,JNI,以及如何使用opencv等;