Unity Android混合开发

 初次写作,如有理解偏差,还请海涵。 

 之所以写这篇文章,是因为在实际项目中想实现一写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信息

Unity Android混合开发_第1张图片

C#声明Callback函数


void Callback(string message){
  Debug.LogError(message);
}

至此。Unity和Android的互相交互已完成

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Unity)