Android/Unity大乱斗-完整双方集成交互指南-下篇

简介: 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!

👉即将学会

从头到脚,从懵懂到运行,完美搞定Android和Unity联合开发。文章分上下两篇。

👉背景

🙈小空和🙎小芝:这是一个很长很长的story!

👉实践过程

布局渲染

我们需要在任意布局加载3d,怎么个任意法?就是找个view来addview 既不影响3d 还有android原生界面

//xml布局
<LinearLayout
        android:id="@+id/linear"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="50dp"
        android:orientation="vertical" />
//java文件
mLinear.removeAllViews();
mLinear.addView(mUnityPlayer.getView());
mUnityPlayer.requestFocus();
复制代码

操作效果请看图片,全部具体代码的话 就直接放到RXlung/Android-Unity---: Android/Unity大乱斗-完整双方集成交互指南 (github.com)

网络异常,图片无法展示
|

通信交互

Android调用Unity

//参数二是 Unity中的方法名   参数一是哪个物体挂在了这个C#脚本  参数三 字符串
UnityPlayer.UnitySendMessage("Main Camera", "AndroidCallUnity", "");
复制代码

网络异常,图片无法展示
|

Unity调用Android 仔细看注释

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//https://juejin.cn/user/4265760844943479/posts
//https://zhima.blog.csdn.net/
public class Manager : MonoBehaviour
{
    private AndroidJavaObject m_androidObj = null;
    public GameObject diqiu;
    void Start()
    {
        //注意-情况不同 com.unity3d.player.UnityPlayer  可能不同,可参考其他博主
        AndroidJavaClass androidClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        m_androidObj = androidClass.GetStatic<AndroidJavaObject>("currentActivity");
        diqiu.SetActive(false);
    }
    //Unity中的某个物体出发此事件
    public void UnityCallAndroid()
    {
        Debug.Log("调用方法");
        if (m_androidObj != null)
        {
            Debug.Log("调用方法进来");
            // 第一个参数是android里面java代码的方法名,第二个是携带的字符串参数
            m_androidObj.Call("CallAndroid", "我是Unity,我给你发消息了");
        }
    }
    //Android调用Unity-方法名一定要注意
    public void AndroidCallUnity(string json)
    {
        if (diqiu.activeInHierarchy)
        {
            diqiu.SetActive(false);
        }
        else
        {
            diqiu.SetActive(true);
        }
    }
}
复制代码

场景切换

  • Unity内部自己去处理,就跟玩游戏一样,让Unity开发自己去做。
  • Andorid触发,unity换场景,这个借助上面说的消息通信来实现。
  • 这还有一个技巧,如果资源不是很多且在一个场景的话,可以让Unity一次直接渲染出来存在字典里,然后想显示哪个Android给Unity发消息,Unity根据订好的消息,展示不同的内容,这个好处就是切换展示速度极快。重点处理一下刚启动的时候的耗时即可。

动态资源

态加载资源的问题,因篇幅有限,咱先只提供个思路,Unity支持读取android设备的存储文件,让他们处理即可,然后android发消息告诉他们地址即可

// 参数一是Unity中的物体名称,参数二Unity中的方法名  参数三路径字符串
UnityPlayer.UnitySendMessage("AndriodMethodMgr", "CallUnitySetPath", Environment.getExternalStorageDirectory() + "");
复制代码

啊哈,到这基本就结束了。快了又开心。

坑中带坑

为了愉快的装逼,最好还是看一看遇到的这些问题,能至少省几天时间。

1. 混淆问题,如果你开启了混淆,切记 切记,把混淆添加进入,这个大坑耽误我好久啊

2. 如果模型在unity中没问题,在android端穿帮,可以看看发布质量,将android的设置成高的

网络异常,图片无法展示
|

3. 如果反复执行的模型动画不对,怎么不对?举例心脏跳动,这是非常注重动画的衔接的,如果衔接时间不对会造成心脏动画的抖动,这会非常的明显。

可以看动画的setting 退出时间,退出时间是比例(如下图),1代表全部动画,0.5代表动画使劲按的一般。过度时间前后动画重叠(好像默认.95?) 可以改成0,如图设置

网络异常,图片无法展示
|

4. 集成到apk后 申请了横竖屏 但是apk没作用,是unity发布出的设置导致的,再Unity导出的时候 other setting中设置宣传方向

5. 权限问题,上面说了会导出一个android项目,你仔细看这个项目的AndroidManifest文件,你会发现也有权限。 注意,这时候比如你的android项目有权限A 这个Unity导出的项目没有权限A,当你集成合并之后,导致最终的apk没有权限A,这并不是我们想看到的; 所以为了 解决这个问题,很简单,我们把两个清单文件的权限保持一致即可,记住啊,否则怎么哭的都不知道。

6. 还有一个未解决的问题,放到这,有朋友知道的话,感谢指教。 带有动画的一个物体,在有的android设备上,动画表现征程,但是有的会出现动画跳动的情况,感觉像是电视的进度条那在跳进度一样。

结尾

最后,别问我为啥知道这么多问题,问就是因为自己跪着走过来的。

网络异常,图片无法展示
|


作者:芝麻粒儿

链接:https://juejin.cn/post/6995888006179602468

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

👉其他

📢作者:小空和小芝中的小空

📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

相关文章
|
1月前
|
JSON Android开发 数据格式
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
android与Web服务器交互时的cookie使用-兼谈大众点评数据获得(原创)
34 2
|
8天前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
25天前
|
安全 物联网 测试技术
构建未来:Android与IoT设备的无缝交互深入探索软件自动化测试的未来趋势
【5月更文挑战第30天】在物联网(IoT)技术快速发展的当下,Android系统因其开放性和广泛的用户基础成为了连接智能设备的首选平台。本文将探讨如何通过现代Android开发技术实现智能手机与IoT设备的高效、稳定连接,并分析其中的挑战和解决方案。我们将深入挖掘Android系统的底层通信机制,提出创新的交互模式,并通过实例演示如何在Android应用中集成IoT控制功能,旨在为开发者提供一套可行的指导方案,促进IoT生态系统的进一步发展。
|
1月前
|
Java 开发工具 Android开发
Android mk 集成app
Android mk 集成app
26 5
|
17天前
|
文字识别 Android开发 C++
Tesseract OCR集成Android Studio实现OCR识别
Tesseract OCR集成Android Studio实现OCR识别
29 0
|
1月前
|
安全 物联网 Android开发
构建未来:Android与IoT设备的无缝集成
【5月更文挑战第10天】 在数字化时代的浪潮中,智能设备与互联网的结合日益紧密。本文深入探讨了Android系统如何通过其开放性和灵活性成为连接物联网(IoT)设备的关键枢纽。我们将分析Android平台与IoT设备集成的技术途径,探索它们如何共同塑造智能家居、可穿戴技术以及工业自动化等领域的未来。文中不仅阐述了当前的发展状况,还展望了未来的发展趋势,特别是安全性和隐私保护方面的挑战及对策。
22 1
|
1月前
|
XML JSON API
转Android上基于JSON的数据交互应用
转Android上基于JSON的数据交互应用
19 1
|
1月前
|
Java Android开发
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
Android桌面快捷方式图标生成与删除 使用Intent与launcher交互
31 1
|
1月前
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。
|
1月前
|
存储 监控 安全
打造高效移动办公环境:Android与iOS平台的集成策略
【5月更文挑战第15天】 在数字化时代,移动办公不再是一种奢望,而是日常工作的必需。随着智能手机和平板电脑的性能提升,Android与iOS设备已成为职场人士的重要工具。本文深入探讨了如何通过技术整合,提高两大移动平台在企业环境中的协同工作能力,重点分析了各自平台上的系统集成策略、安全性考虑以及跨平台协作工具的应用。通过对现有技术的剖析与案例研究,旨在为读者提供一套实用的移动办公解决方案。