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月前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
239 1
|
23天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
90 1
|
2月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
134 3
|
3月前
|
存储 并行计算 数据处理
跨语言集成:Dask 与其他编程环境的交互
【8月更文第29天】Dask 是一个开源的并行计算库,旨在为 Python 社区提供高性能的并行计算能力。尽管 Dask 主要在 Python 生态系统中使用,但它也可以与其他编程语言环境(如 R 和 Julia)进行交互,实现跨语言的数据处理。本文将探讨如何利用 Dask 与 R 和 Julia 等其他语言集成,以便在不同编程环境中共享数据和计算资源。
99 4
|
3月前
|
图形学 Android开发 iOS开发
穿越数字洪流,揭秘Unity3d中的视频魔法!Windows、Android和iOS如何征服RTSP与RTMP的终极指南!
【8月更文挑战第15天】在数字媒体的海洋中,实时视频流是连接世界的桥梁。对于那些渴望在Unity3d中搭建这座桥梁的开发者来说,本文将揭示如何在Windows、Android和iOS平台上征服RTSP与RTMP的秘密。我们将深入探讨这两种协议的特性,以及在不同平台上实现流畅播放的技巧。无论你是追求稳定性的RTSP拥趸,还是低延迟的RTMP忠实粉丝,这里都有你需要的答案。让我们一起穿越数字洪流,探索Unity3d中视频魔法的世界吧!
62 2
|
2月前
|
vr&ar 图形学 API
Unity与VR控制器交互全解:从基础配置到力反馈应用,多角度提升虚拟现实游戏的真实感与沉浸体验大揭秘
【8月更文挑战第31天】虚拟现实(VR)技术迅猛发展,Unity作为主流游戏开发引擎,支持多种VR硬件并提供丰富的API,尤其在VR控制器交互设计上具备高度灵活性。本文详细介绍了如何在Unity中配置VR支持、设置控制器、实现按钮交互及力反馈,结合碰撞检测和物理引擎提升真实感,助力开发者创造沉浸式体验。
150 0
|
2月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
150 0
|
2月前
|
图形学 开发者 UED
Unity游戏开发必备技巧:深度解析事件系统运用之道,从生命周期回调到自定义事件,打造高效逻辑与流畅交互的全方位指南
【8月更文挑战第31天】在游戏开发中,事件系统是连接游戏逻辑与用户交互的关键。Unity提供了多种机制处理事件,如MonoBehaviour生命周期回调、事件系统组件及自定义事件。本文介绍如何有效利用这些机制,包括创建自定义事件和使用Unity内置事件系统提升游戏体验。通过合理安排代码执行时机,如在Awake、Start等方法中初始化组件,以及使用委托和事件处理复杂逻辑,可以使游戏更加高效且逻辑清晰。掌握这些技巧有助于开发者更好地应对游戏开发挑战。
121 0
|
3月前
|
开发者 图形学 Java
Unity物理引擎深度揭秘:从刚体碰撞到软体模拟,全面解析实现复杂物理交互的技巧与秘诀,助你打造超真实游戏体验
【8月更文挑战第31天】物理模拟在游戏开发中至关重要,可让虚拟世界更真实。Unity作为强大的跨平台游戏引擎,内置物理系统,支持从刚体碰撞到布料模拟的多种功能。通过添加Rigidbody组件,可实现物体受力和碰撞;使用AddForce()施加力;通过关节(如Fixed Joint)连接刚体以模拟复杂结构。Unity还支持软体物理,如布料和绳索模拟,进一步增强场景丰富度。掌握这些技术,可大幅提升游戏的真实感和玩家体验。
110 0