Unity与Android交互通信系列(4)

这篇具有很好参考价值的文章主要介绍了Unity与Android交互通信系列(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  上篇文章我们实现了模块化调用,运用了模块化设计思想和简化了调用流程,本篇文章讲述UnityPlayerActivity类的继承和使用。

  在一些深度交互场合,比如Activity切换、程序启动预处理等,这时可能会需要继承Application和UnityPlayerActivity类,下面我们演示该功能。

  本示例需要引入UnityPlayer类,该类位于Unity提供的Classes.jar包中[ 该包文件位置与Unity安装路径和版本有关,如笔者使用Unity2020.3.15,Unity安装在C盘默认目录,其路径为:C:\Program Files\ Unity\ Hub\ Editor \2020.3.15f1c1\ Editor\ Data\ PlaybackEngines\ AndroidPlayer\ Variations\ il2cpp\ Release\ Classes],所以我们需要先引入该Jar包,首先直接复制Classes.jar包,然后在Android Studio工程app目录(本示例使用模块,所以我们将其放置到android2unity模块的libs目录下)的libs文件夹上鼠标右键,在弹出的菜单中选择Paste粘贴Classes.jar包。然后打开同级目录的build.gradle文件,在其dependencies配置节中引入该Jar包,如图1所示。

Unity与Android交互通信系列(4),ARCore,unity,android,交互

图1引入classes.jar包
  由于我们只是引入其进行编译,保证编译正确进行,打包的时候并不需要classes.jar包,所以使用complieOnly指令确保该Jar包只用于编译[ 修改完build.gradle文件后不要忘记点击Sync Now按钮以使配置起作用]。

  在Unity2019以后的版本中,UnityPlayerActivity类不再位于Classes.jar包,而是以独立的UnityPlayerActivity.java文件存在[ 该java文件位置与Unity安装路径和版本有关,如笔者使用Unity2020.3.15,Unity安装在C盘默认目录,其路径为:C:\Program Files\ Unity\ Hub\ Editor\ 2020.3.15f1c1\ Editor\ Data\ PlaybackEngines\ AndroidPlayer\ Source\ com \unity3d\ player],将该文件复制到模块代码文件夹下。

  继承Application类的示例代码如下:

//代码片断1
//Java端代码
package com.davidwang.android2unity;
import android.app.Application;

public class CustomApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        System.out.println("自定义Application");
    }
}

  继承UnityPlayerActivity类的示例代码如下:

//代码片断2
//Java端代码
package com.davidwang.android2unity;
import android.os.Bundle;

public class CustomActivity extends UnityPlayerActivity {
    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        System.out.println("自定义Activity");
    }
}

  正常导出aar包,将该aar包文件复制到Unity工程Assets/Plugins/Android目录下。由于我们继承了Application和UnityPlayerActivity类,实质上是修改了应用程序的入口,所以需要在Unity工程Assets/Plugins/Android目录下新创建AndroidManifest.xml文件,文件内容如下:

//代码片断3
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.davidwang.android2unity" >
    <application
        android:name="com.davidwang.android2unity.CustomApplication"
        android:label="@string/app_name">
        <activity android:name="com.davidwang.android2unity.CustomActivity"
            android:label="@string/app_name"
            android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="android.app.lib_name" android:value="unity" />
            <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
        </activity>
    </application>
</manifest>

  AndroidManifest.xml文件中第一行定义了应用程序包名,所以Unity工程中的包名必须与该包名一致。然后将应用程序入口(application节)设置为自定义的CustomApplication;将启动Activity设置为自定义的CustomActivity,并设置了相应的intent-filter过滤器。

  因为我们是直接继承了Unity的主Activity,所以不需要在Unity场景中做任何处理,打包到真机运行,可以看到正确的自定义内容输出。


提示

        在导入该aar包后,unity打包时会引发配置错误,原因是aar包中BuildConfig.class类配置与unity项目配置有冲突。将导入的aar包名后缀改为rar,然后利用rar解压工具直接打开(不是解压出来),可以看到classes.jar包,鼠标双击在另一个解压界面中打开,然后点击项目包名依次展开,可以看到在工程/模块包名下有一个BuildConfig.class文件,鼠标右键在弹出的菜单中选择删除,关闭新打开的解压界面,回到原解压界面时会弹出提示,选择更新压缩文件,完成包内文件的删除,最后再将rar后辍改为aar即可。

        如果是打包为jar文件,处理方法类似,但其包内没有classes.jar包,可以直接点击模块包名依次展开,删除BuildConfig.class文件,后续处理方法与前文一致。文章来源地址https://www.toymoban.com/news/detail-788673.html

到了这里,关于Unity与Android交互通信系列(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity3D】Unity与Android交互

            本文主要介绍 Unity 打包发布 Android apk 流程、基于 AndroidJavaObject(或 AndroidJavaClass)实现 Unity 调用 Java 代码、基于 UnityPlayer 实现 Java 调用 Unity 代码,官方介绍见→Android。         Unity 项目 C# 中获取平台的代码如下,需要引入 UnityEngine 命名空间。         Ru

    2024年02月07日
    浏览(44)
  • Unity与Android交互(4)——接入SDK

    【前言】 unity接入Android SDK有两种方式,一种是把Unity的工程导出google project的形式进行接入,另一种是通过把Android的工程做成Plugins的形式进行接入。我们接入SDK基本都是将SDK作为插件的形式接入的。 对我们接入SDK的人来说,SDK也是分等级的: 第一等级:只有so文件,这种

    2024年02月16日
    浏览(41)
  • Unity与Android交互(3)——需要了解的Andorid基础知识

    【前言】 在上一篇文章中只是说了如何实现unity和android交互的问题,要了解其中的原理还必须要先了解一些Android的基础知识,了解后也能搞清楚如何接入SDK或者写Native插件。 (以下只是简要介绍,详细的内容需要自己去看链接) 【Android四大组件】 Activitiy 它提供了一个窗口

    2024年02月10日
    浏览(44)
  • Unity与原生交互之AndroidStudio篇——Unity导出Android工程,导入AndroidStudio打包APK全流程

          unityLibrary: unity的功能库模块 , android工程用到的重要文件夹 launcher: unity的启动器模块,包含很少的java代码   直接Open unity导出的整个android项目,Launcher模块作为app启动模块  1.AS先New一个空项目:   Empty Activity 不能选择Language,默认为Kotlin语言  Empty Views Activity 可以选择

    2024年02月11日
    浏览(42)
  • 【unity与android的交互】移动游戏发布更安心!Unity安卓平台打包相关的常见参数全详解

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 :Unity基础实战 首先需要切换到安卓平台 step1 :打包前的基础参数的设置 step2:包名的设置需要勾选,必须要去设置的内容 打包后进行测

    2024年04月17日
    浏览(72)
  • Unity3D2020+导出Android工程中使用并交互

    , 目录 1,版本信息 2,前期准备 Unity方面: Android方面: 3,Android与Unity3D交互 unity2020+ android studio 2021 *不要用android studio 2020系列,存在不能导入Library的bug 1,先配置打包的一些必要要素,包括包名之类 2,修改打包选项,将其打包为Android工程  3,打包出来的工程如下,其中

    2023年04月08日
    浏览(60)
  • 【问题记录】Unity编译ARCore模板项目问题

    Unity版本:2021.3.8f1c1 创建AR项目并下载使用默认模板,编译并发布到Android实机。 1、第一个问题: Error:Could not read cache value from\\\'C:UsersUsername.gradledaemon6.1.1registry.bin\\\'. 查询参考: 由 (5条消息) 安卓:Could not read cache value from\\\'C:UsersUsername.gradledaemon1.12registry.bin\\\'_Royel transfo

    2023年04月09日
    浏览(37)
  • Unity3d使用Netcode实现Hololens、Android和Pc端通信

    在Unity3d中使用现有的Netcode/Mirror组件实现Hololens、Android和Pc端的三方通信,可以指定一平台为服务器端,其他的两平台多为客户端,不过通常是进行两个平台的通信即可。在这片文章中,可以实现平移、缩放以及旋转的同步 具体步骤如下: 版本:unity2020.3LTS、VS2019 一、配置

    2024年02月09日
    浏览(49)
  • Unity与Js通信交互

    目录 1.Js给Unity传递消息 2.Unity给Js传递消息 其中,__objectName__ 是场景中的对象名称;__methodName__ 是当前附加到该对象的脚本中的方法名称;__value__ 可以是字符串、数字,也可为空。   unityInstance在打包之后index.html的位置  在别的地方用unityInstance,要在图片红框位置后面打括号

    2024年02月03日
    浏览(26)
  • Unity3D开发之unity和js通信交互

    官方 方法分享:Unity - 手动:与浏览器脚本的交互 (unity3d.com) 首先需要写一个JS的脚本,主要是调用mergeInto();方法,第一个参数不用变,第二个参数就是JS的方法集合。写完之后将这个文件的后缀改为.jslib,放到Plugins文件夹中  Test  内容: 2.C#(挂在场景 任意物体上) 3.Uni

    2024年02月12日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包