本文主要是介绍Unity与Android交互-扩展Unity的MainActivity,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一.前序准备
基础知识相关文章:https://blog.csdn.net/jiaxunnanling/article/details/89947744
新建工程,并引入Unity内置jar包相关文章:https://blog.csdn.net/jiaxunnanling/article/details/90268239
二.如何扩展
由于Unity发布Android的Apk时,只包含一个主Acitivity,俗称MainActivity,可以通过扩展该Activity,达到预期效果。通过引入Unity内置的Android的Jar库,并继承库中的UnityPlayerActivity。
Unity内置的Android的Jar库地址在Unity目录:Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
其中classes.jar就是Unity内置的Android的Jar库,这是扩展MainActivity需要使用的库。
Unity在发布Android的Apk时
如果没有在目录Plugins/Android(Unity特殊目录)存放AndroidManifest文件,Unity会使用默认的AndroidManifest文件 。
如果存在AndroidManifest文件,Unity会使用该AndroidManifest文件替换默认的AndroidManifest
扩展Unity的MainActivity时,注意AndroidManifest配置的主要Activity入口,例如使用自己扩展的AndroidManifest代替Unity默认的AndroidManifest,这样Activity入口就是我们自定义的Activity入口。
关于AndroidManifest的合并,可以参考基础知识:https://blog.csdn.net/jiaxunnanling/article/details/89947744
三. 案例演示(导出Arr包)
如何引入Unity内置的jar包可以参考 :https://blog.csdn.net/jiaxunnanling/article/details/90268239
在模块的这个目录下,右键新建一个空的Activity,不知道新建模块的可以参考:
https://blog.csdn.net/jiaxunnanling/article/details/90268239
目录结构,移除不必要的东西
修改MainAcitivity的代码,继承UnityPlayerActivity
package com.huowu.add; import android.os.Bundle; import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);} }
修改AndroidManifest的文件内容,可以从其他地方复制过来再修改
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.huowu.add"><applicationandroid:label="@string/app_name"android:usesCleartextTraffic="true"><activityandroid:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-dataandroid:name="unityplayer.UnityActivity"android:value="true" /></activity></application></manifest>
在MainActivity中,添加一个加法运算方法,相当于扩展UnityPlayerActivity的功能
package com.huowu.add; import android.os.Bundle; import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}//加法运算public int Add(int num1,int num2){int sum = num1 + num2;return sum;} }
选择该模块,选择菜单条的Build=>Make Module '模块名'
编译好了之后,在目录build=>outputs=>arr
复制一份arr出来,用压缩软件,推荐使用7z,打开arr包,跟jar包的区别里面包含有很多文件
打开libs,把里面的classes.jar删掉,这是我们之前导入的Unity内置的jar包,为什么要删掉,在基础知识提过,Unity打包的时候会把内置的jar包引入,如果这个arr包也引入了,就会产生冲突。
把arr包里面的AndroidManifest文件复制一份出来,作为自定义的AndroidManifest文件,用来替换Unity默认的AndroidManifest文件。
把Arr包与AndroidManifest文件,一起放入Unity工程中的Assets目录下Plugins/Android(没有这些目录就创建)
新建脚本,AndroidToUnity,挂载到UI文本组件上界面,涉及到的内容,可以参考基础知识:https://blog.csdn.net/jiaxunnanling/article/details/89947744
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class AndroidToUnity : MonoBehaviour {public Text text; //用来显示结果值private AndroidJavaClass androidJavaClass; //获取Unity发布的唯一MainActivity类private AndroidJavaObject androidJavaObject;//获取Activity对象public void Awake(){text = this.GetComponent<Text>();//Unity要导出的MainActivity类androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//获取MainActivity的实例对象androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity"); }public void Start(){Add();}public void Add(){//调用Android写好的add的方法,并传参,获取结果值int sum = androidJavaObject.Call<int>("Add",5,5);text.text = "从Android计算出来的值为:" + sum;} }
发布APK,运行在模拟器的结果
四. 导出Jar包
Build Module后,打开目录build=>intermediates=>packaged-classes=>debug
以及 build=>intermediates=>manifest=>full=>debug
(注意我的AndroidStudio版本是3.1.3,其余的版本的目录可能不一样)
复制build=>intermediates=>packaged-classes=>debug中的classes,该目录下的libs是我们之前引用的Unity内置jar包,所以不需要复制出来,如果是其他jar包就需要一同复制出来。
复制 build=>intermediates=>manifest=>full=>debug目录下的AndroidManifest文件。
把classes和AndroidManifest文件一起导入的Unity工程下的Assets/Plugins/Android目录下,按照导出arr包时,编写AndroidToUnity一样,运行的效果是一样的。
区别在于Jar包没有过多的文件,相关联的文件需要自己去找。
Arr包已经把涉及到的资源都整理成一套了。
这篇关于Unity与Android交互-扩展Unity的MainActivity的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!