初次写作,如有理解偏差,还请海涵。
之所以写这篇文章,是因为在实际项目中想实现一写Android原生的功能,有些用Unity无法实现,有些用Unity实现起来比较繁杂,还有些三方SDK压根不支持Unity平台。废话少说直接上代码
先上Unity的文档https://docs.unity3d.com/Manual/PluginsForAndroid.html
此篇文档讲述Unity如何制作使用Android插件,实现Unity直接调用Android代码
AAR形式插件
Jar形式的插件
直接拓展UnityPlayerActivity.Java类
通过制作.so C++文件,实现原生调用
本文主要讲解前三种模式
举个播放广告的例子
实现Java函数
package com.tapque.ads;
public class AdsManager{
private static AdsManager instance;
public static AdsManager instance() {
if (null == instance) {
instance = new AdsManager();
}
return instance;
}
protected void showRewardVideo(Activity activity) {
//todo 播放广告
}
}
C#通过实例化Android Java对象
void InitAdsManager(){
AndroidJavaObject AndroidAdsManager = new AndroidJavaClass("com.tapque.ads.AdsManager").CallStatic. ("instance");
AndroidJavaObject currentlyActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
}
C#反射调用Java函数
public void ShowRewardVideo(){
AndroidAdsManager.Call("showRewardVideo",AndroidManager.GetCurrentlyActivity());
}
Java调用Unity
public static void sendMessageToEngine(String message) {
//AdsManager:Unity Scene中的GameObject对象名称
//Callback:Unity Scene中的GameObject对象身上继承MonoBehaviour的C#脚本的接收iOS函数明
//message:发送的消息
UnityPlayer.UnitySendMessage("AdsManager","Callback",message);
}
C#接收Android信息
C#声明Callback函数
void Callback(string message){
Debug.LogError(message);
}
至此。Unity和Android的互相交互已完成