当前位置:   article > 正文

android工程集成unity项目及两者之间相互通信_android 与unity 生命周期

android 与unity 生命周期

本文讲详细介绍android工程集成unity项目,及达成android和unity工程之间相互调用的实现方案
主要分成两部分 1:集成2:通信

课前准备

1.准备安卓项目

相信会看这篇文章的同学都有一定的安卓基础了,as创建一个空工程备用
然后准备一个java接口类备用,这个接口类可以在先在as里创建好,
在这里插入图片描述

public class   AndroidUnityBridge {
 private static final String TAG = "AndroidUnityBridge";
 private UnityInterface unityInterface;
 public static AndroidUnityBridge instance;
 public static AndroidUnityBridge GetInstance(){
      if (instance == null){
           instance = new AndroidUnityBridge();
      }
      return instance;
 }

 public void setMsg(String s){
      Log.i(TAG, "setMsg: "+ s);

      if (unityInterface!=null){
           UnityPlayer.UnitySendMessage("Cube", "setString", s+  unityInterface.setFuntion("first param", "second param"));
      }
 }

 public void setUnityInterface(UnityInterface unityInterface) {
      this.unityInterface = unityInterface;
 }

 public String getStrings(){
      if (unityInterface !=null){
           return unityInterface.setFuntion("fisrt", " second");
      }
      return "null";
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

}

配置好ndk环境
在这里插入图片描述

添加unityStreamingAssets配置
在这里插入图片描述

unityStreamingAssets=.unity3d
  • 1

在strings.xml配置需要的字符串

	<string name="game_view_content_description">Game view</string>
  • 1

不配置会报错
在这里插入图片描述

2.准备unity项目

下载安装unity请找相关攻略,这里不展开介绍,启动unity创建一个空的项目,然后创建一个正方体
在这里插入图片描述

然后创建一个脚本文件添加到cube上

在这里插入图片描述

脚本内容如下

在这里插入图片描述

在这里插入图片描述

很简单,写了几个测试方法

这里注意几点,首先,unity里的方法名要和android里的对应,另外实现类的路径要和android里的对应
比如这里的base(“com.unity.mynativeapp.UnityInterface”)
base里的内容是android里定义的接口的路径

好,到这里我们的准备工作就做完了

导出unity工程集成包

打开unity工程,打开build settings 窗口,切换到android platform,勾选export project
点击export 等待导出工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意这里需要设置arm64再导出,不然会报错

Failed to load "libmain.so"
  • 1

等待片刻,导出的工程目录包含一个启动工程和一个unitylibrary
在这里插入图片描述

我们只要unity library就可以了

导出成功后,我们需要把library的manifest文件里的application标签删除,不然会出现merge manifest失败的错误
在这里插入图片描述

集成unity Library到android工程

有两种方式:1.依赖module 2.依赖aar

1.依赖module

打开android studio ,选择导入module,把unity Library导入到android工程,同时完成依赖设置
在这里插入图片描述

在这里插入图片描述

为了让主工程能用到library里的jar 需要在library的gradle里修改下设置
在这里插入图片描述
改为 api

或者
在这里插入图片描述
这样在app工程里就可以访问UnityPlayerActivity了

2.依赖aar

这种方式比较简单,推荐这种方式

首先把导出的library编译为aar
在这里插入图片描述

接着android项目添加依赖

implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
  • 1

然后把生成的aar放在libs文件夹下

在这里插入图片描述

接着在activity里编写unity player的添加代码,运行就可以了
在这里插入图片描述

相互通信

首先需要建立通信连接,这里的方式是,安卓端写接口,unity实现接口,unity使用的地方初始化AndroidUnityBridge,并设置UnityInterface

在这里插入图片描述
unity调用android的方法,先初始化安卓端定义的类,然后拿着类去调用对应的方法名,如上

android调用unity的方法,直接拿着android端定义的接口类去调用
在这里插入图片描述

注意:
android调用unity有个简便的用法,这个用法不用定义接口
在这里插入图片描述
android使用unity player的 UnitySendMessage方法通知unity脚本的方法调用

其中第一个参数是unity脚本挂载对象的名词,第二个参数是脚本的方法名,第三个参数是string参数内容

在这里插入图片描述
这里参数只能有一个string,如果想有更多的参数信息,可以封装成json来传递

技巧

unity导出的工程里就只有UnityPlayerActivity一个类
里面有一个UnityPlayer unity工程画面就是这个对象

我们可以直接用UnityPlayer去当view使用,因为UnityPlayer继承的
在这里插入图片描述

但是注意,要在对应的activity里调用UnityPlayer的生命周期
onCreate 里调用
在这里插入图片描述
让界面显示unity画面最主要是要重写 onResume 和 onWindowFocusChanged 方法,
其他的生命周期最好都要掉一下,参考UnityPlayerActivity里的写法
在这里插入图片描述

注意:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/810459
推荐阅读
相关标签
  

闽ICP备14008679号