unity学习笔记-unity(2019)实现与as相互跳转

2023-11-13

Unity(2019)嵌入安卓开发-实现相互跳转

思路

先将unity打包成as能识别的文件格式,里面需要包含从unity跳转到安卓原生界面的方法。然后在as中导入unity打包好的模块,添加一些配置信息,添加从原生安卓界面跳转到unity的方法,最后打包apk测试即可

流程

先在unity中添加跳转到安卓的方法

	AndroidJavaObject jo;
    public Button btn;
    private void Awake()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        btn.onClick.AddListener(CallAndroid);
    }
    public void CallAndroid()//这个是从unity跳转到原生app界面的方法,这里用到的个人的理解是反射的原理,通过在unity获得java的反射从而调用他的方法(纯粹个人猜测)
    {
        jo.Call("ShowToast");
        Debug.Log("点击按钮");
        System.Console.WriteLine("点击按钮");
    }

注意在这里插入图片描述
这两坨是不能改的(看大佬的帖子是这么说的,还没试过修改)
然后在场景中添加一个button的ui,把脚本挂载到场景中的某个物体,然后把button挂载到脚本上即可
然后打包在这里插入图片描述
2019是这么操作的,由于项目升级,2018的打包方式和2019是不一样的,18的话点击gradle打包方式就可以了

AS配置unity的信息

这里可以看下面这两个大佬的帖子,写的很详细,跟着做就行了

https://blog.csdn.net/weixin_43271060/article/details/109547834
https://blog.csdn.net/qq_45888298/article/details/104209044?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control

这里我主要以第二个帖子为主进行的配置在这里插入图片描述
在as里找到setting.gradle配置文件,然后添加

include ':unityLibrary'
project(':unityLibrary').projectDir=new File('F:\\test\\unityLibrary')

这两行代码,意思是让as去找对应路径下的unity打包好的项目
然后在这里插入图片描述
在app模块的build.gradle里添加

implementation project(':unityLibrary')
    implementation fileTree(dir: project(':unityLibrary').getProjectDir().toString() + ('\\libs'), include: ['*.jar'])

这两行代码,这里我的大概理解是把里面的jar add as library的方法
然后还需要
在这里插入图片描述

flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }

这行代码,这里我感觉和前面的用处差不多,不过没有仔细研究
然后sync一下,如果找不到的话,可以在这里插入图片描述
右上角的红框,点击是一样的效果
然后就能看到unitylibrary导入在我们的as 里了
然后打开unitylibrary的androidmanifest.xml文件,吧把红框里的注释掉
不然apk在生成的时候会出现两个apk。一个是原生的,一个是unity的在这里插入图片描述
到这里as 的配置也差不多了,接下来就是添加互相跳转的方法即可

2021.5.27更新一下

后期如果unity项目有更新的话,可以在unity打包成export后把里面的内容复制粘贴到上面as识别unitylibrary的目录里去,然后sync一下,再在unity的library里的androidmanifest.xml里注视掉inflter那个标签即可(不注视的话打包后会在真机里出现两个apk(因为包名不同导致)),用这个方法就快捷一点,不用每次都重新新建as项目然后重复这些操作

as添加跳转至unity的方法

在app的MainActivity类里添加下面的代码

在这里插入图片描述
这里的意思是给原生app界面里的button添加监听事件,当点击的时候则跳转到unity的activity里
在这里插入图片描述
上面是在as里简单添加button的流程(本人对as的使用不熟练,用的都是比较简单的~)
记住这里button 的id,我们上面跳转到unity的方法里需要用到这个button的id来找到这个button

as添加unity跳转到app的方法

在这里插入图片描述
在app模块的路径下,创建一个新的activity类,然后继承unityplayerActivity这个父类
添加下面的代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_unity);
    }
    public void ShowToast(){
        Intent intent = new Intent(this,MainActivity.class);
        this.startActivity(intent);
    }

需要引用的alt+enter让程序自动添加引用即可
到这里就可以进行打包调试了

调试的方法

pc上

在这里插入图片描述
在这里插入图片描述
然后ok即可

手机上

打开开发者选项(没有的在关于手机里点多几次版本号就有了)
打开usb调试,注意,这里我的手机是neo5,点击管理文件的话as是识别不了的,我是点击传输照片才行的
然后点击在这里插入图片描述
这个播放键,手机就会自动安装我们写好的程序
这里需要注意,打包好后,如果有的大佬和我一样出现了string 在这里插入图片描述
类似这种问题的话,需要在在这里插入图片描述
路径下添加这个代码

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

小的也不是很懂这个代码的含义,但能解决string出现的问题
然后测试运行即可,到这里小弟的跳转功能就实现了,就是从app跳转到unity上的时间会有点长

历经将近半年的时间,终于把这个难关打通了~其实之前已经基本实现了,就是卡在string这个bug上,一直不知道怎么解决,就搁置了,之前使用的是2018的版本,所以2018的跳转按照流程来走的话应该是没问题的,只要在string.xml文件里添加上面的代码就能解决
解决了就一个字,爽!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
加油,不能骄傲~
后期项目就要开始负责了,成长系统任务系统装备系统等等等等,还有资源热更新的问题,让一个半路出家的人来承受确实顶,希望能坚持住吧,加油~

同天晚上更新
有些细节没有处理
1,app跳转到unity的时候虽然能正常运行,但时间太长
2,当从unity跳转到app的时候,回来都是重新打开的状态,体验极差
这两个目前感觉只能从as上下手,但是本人对as的研究太浅,网上对这些的处理有的行不通, 有的是看不懂,这些问题只能等大佬或者以后自己研究研究解答了

隔天更新一下~
有关两个项目的包名是否需要一致的问题,这里我测试的时候用的不是一致的包名,也能够正常运行,所以应该是不用一致的~
不过这可能只适用于2019版本及以上,以下的话就不清楚了~

2022.12.8更新
问题,为了应用上传手机厂商应用市场,需要打包32位64位兼容包才能过审,但是unity2019如果使用mono模式打包的话是无法兼容64位的,在嵌入到安卓后会提示硬件不支持,所以在unity项目打包的时候需要把脚本的编译改成il2cpp的模式,并且勾选上下方红框勾上的armv7和arm64,一定要勾上,这里说一下我的问题,测试中为了加快速度于是我在中途改回了mono模式去打包apk,然后内嵌到安卓项目的时候再用回il2cpp,但是你在unity设置中选回il2cpp的时候,下面的arm64会恢复到默认的不勾选的状态,切记,选择了il2cpp后一定要看一下下面的两个arm是不是都有勾选上,没有的话在内嵌到安卓的时候在真机运行时很多机型就会提示硬件不支持的问题
再提一下,内嵌的安卓项目里最好把原来的unity的安卓工程的lib和src删掉,不然的话打包出来会有比实际大很多,不知道是缓存的问题还是什么
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

unity学习笔记-unity(2019)实现与as相互跳转 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • 禁止的软件包名称:java

    我尝试从数据库名称为 jaane 用户名 Hello 和密码 hello 获取数据 错误 java lang SecurityException Prohibited package name java at java lang Class
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa
  • Java列表的线程安全

    我有一个列表 它将在线程安全上下文或非线程安全上下文中使用 究竟会是哪一个 无法提前确定 在这种特殊情况下 每当列表进入非线程安全上下文时 我都会使用它来包装它 Collections synchronizedList 但如果不进入非线程安
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • java.lang.IllegalStateException:驱动程序可执行文件的路径必须由 webdriver.chrome.driver 系统属性设置 - Similiar 不回答

    尝试学习 Selenium 我打开了类似的问题 但似乎没有任何帮助 我的代码 package seleniumPractice import org openqa selenium WebDriver import org openqa s
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐