关于ios:厚积薄发开发期资源管理的策略选择

8次阅读

共计 3776 个字符,预计需要花费 10 分钟才能阅读完成。

1)开发期资源管理的策略抉择
​2)iOS14 启动就 Crash
3)IL2CPP 加密:global-metadata.dat 在 iOS 下的解密问题
4)如何实现可程序控制的 3D 动作
5)Unity Editor 内 Screen 的 Width 和 Height


这是第 212 篇 UWA 技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫 10 分钟,认真读完必有播种。

UWA 问答社区:answer.uwa4d.com
UWA QQ 群 2:793972859(原群已满员)

Resource

Q1:因为打包须要用 AssetBundle,然而开发中用 AssetBundle 不太敌对,以上两种加载都会有各自的问题:
Resources:须要放在 Resources 文件夹下,打包不好解决。
AssetDatabase:没有异步加载办法,开发中没方法模仿一些须要异步加载的状况。

目前我的项目用的 Resources,打包机分了两个我的项目,打 APK 的我的项目阉割了 Resources,写了独自版本治理更新命令,然而仍然挺麻烦。大部分公司都是用的 AssetDatabase,请问是否有一些办法能够模仿异步加载?

另外以上两种办法都无奈模仿实在的卸载状况,导致组员不合理操作时,打 AssetBundle 后会有内存透露或者失落援用的状况,能够说一些大家公司开发时用的资源管理计划吗?

A1:用 AssetDatabase 能够加一些随机延时模仿异步,资源加载的接口能够封装一下,做到依据配置来决定走 AssetDatabase 还是走 AssetBundle。

咱们打包机会把打好的 AssetBundle 主动提交到 SVN,能够随时更新下来,在编辑器下测 AssetBundle 比拟不便。

另外:新的 Addressable 也能够试试看。

感激 littlesome@UWA 问答社区提供了答复

A2:据说过一个项目组做法是:平时开发应用 Resources 来加载;打 AssetBundle 或者正式包时,按某些规定依据 Resources 的目录主动生成一个新工程,这样就不必保护两个工程了。

感激张迪 @UWA 问答社区提供了答复

A3:之前是协程模仿 AssetDatabase 下的异步,即 LoadFromFileAsync。

前面尝试过一种办法,就是应用独自的美术工程解决 AssetBundle,而后程序工程不负责任何资源,只应用美术工程打包生成的 AssetBundle。初听下来流程比较复杂,一点点小的改变即须要操作 2 个 Unity 工程。然而其长处也是十分多的。

代码上能够保留 AssetDatabase 的加载局部用于调试,当然能在日常开发中应用 AssetBundle 大部分时候能把 AssetBundle 的 Bug 裸露在 Editor 端,而不是上了真机才出问题。

感激 cloud@UWA 问答社区提供了答复

A4:以前是用 Resources 来加载,只不过会把资源放到 Editor/Resources 目录下来防止被打进包内。

而后要公布的时候切换 Flag,并读取 Editor/Resources 目录下资源进行打 AssetBundle 包。不过当初全副交给 Addressables 来治理了。

感激黄程 @UWA 问答社区提供了答复

iOS

Q:在 iOS 14 公布之后,就呈现闪退问题了。和机型没关,只有是 iOS 14 就必闪退的那种,iOS 13 就失常。用的 Unity 版本是 2018.2.3。求教有人遇到过吗?

A:咱们 iOS14 也出了情况,有两个体现:

  1. 启动就闪退,多起几次能够过来。
  2. 启动后到某个阶段之间卡死(必卡跳不过)。

XCode 里看,始终是 GfxDriver 报错,咱们渠道方发现,XCode 里【BuildSetting – Packaging – Product Name】不能含有中文,有中文就出这个问题,改掉就好了。

根本原因尚不明确,集体猜想 Product Name 会影响 Header Folder Path,可能是代码加载门路中呈现中文会出问题(相似晚期 Unity 的情况)。心愿对你有帮忙。

感激 Walker@UWA 问答社区提供了答复

iOS

Q1:为了加大破解难度,须要对 global-metadata.dat 文件进行加密。
实现形式是:
1. 加密在导出 Android 和 Xcode 工程后进行,对 global-metadata.dat 按字节加密。
2. 批改:
Android:\Editor\Data\il2cpp\libil2cpp\vm\MetadataLoader.cpp
Mac:Unity.app\Contents\il2cpp\libil2cpp\vm\MetadataLoader.cpp
文件中的 LoadMetadataFile 函数,对从文件中读取进去的内容按字节解密。

当初呈现的问题是:在 Android 上没有问题,能够失常加密和运行游戏。然而在 Mac 上,貌似解密函数没有失效,导致启动游戏解体。

求教一下各位大佬:在 Mac 上,global-metadata.dat 的读取是不是不是通过这个函数。我看到 Mac 上 Unity 装置目录还有一个 PlaybackEngines 文件夹,外面也有 IL2CPP 相干文件,例如 MetadataLoader.h,但这个文件是只读的,无奈批改,而且也没有找到 MetadataLoader.cpp。Mac 上解密不失效和这个文件无关吗?

A:iOS 上是间接链接预编译好的 PlaybackEngines\iOSSupport\Trampoline\Libraries\libil2cpp.a
可能须要本人把.a 从工程里移除,把 IL2CPP 源码引入到工程里。

Q2:工程是指 iOS Support/Tramponline 文件夹下的 Xcode 工程吗?要把 Unity.app\Contents\il2cpp\libil2cpp 中的文件全副退出到这个工程外面是吗?

A:是领导出的我的项目工程。具体哪些文件可能须要本人试试了。能够在 Windows 上导个 IL2CPP 的 VS 工程对照一下文件和编译参数。

Q3:咱们最近遇到这个 iOS 加密 Metadata 的问题,请问最初有找到解决方案吗?https://forum.unity.com/threa… 看这个帖子,仿佛是须要 Unity 源码才能够?

A:IL2CPP 的代码间接拖到 XCode 工程里应该就能够了。

感激 littlesome@UWA 问答社区提供了答复

Animation

Q:咱们的需要是心愿用程序实现灵便的拍掌动作,如下图:

两头一个大模型,左右两手,两手掌要做拍掌动作,蓝色点都可作为拍掌点,就是说要让程序控制拍到哪里。目前想到的计划是:
1. 做很多个拍掌动画,而后在 Blend Tree 里用二维混合,但那样不够准确。
2. 用 Final IK,管制两手掌静止,但那样做的动作不天然。

咱们心愿尽量减少 K 动作工作(外包耗不起),问有没有其它计划可用?

A1:这种需要基本上都须要应用 IK 来做,Final IK 是目前看到的 Unity 引擎中最为成熟的 IK 解决方案了。如果还是不行,可能须要思考自行研发了。

该问答由 UWA 提供

A2:咱们之前用过 2D Freeform Directional 的 Blend Tree 来交融前后左右挪动的动作,交融成果是比拟现实的。情理上你别离做最左最右最上和最下四个拍掌动作,而后通过两个参数别离管制左右和高低的交融,可能比拟线性地对应起来,精确度应该能承受,不过我没资源测试,也不确定你对精确度要求水平,还是倡议做个 Demo 试试。

感激邓永健 @UWA 问答社区提供了答复

Editor

Q:在 Unity 2018.4.23 版本中测试,新增一个 9:16 的分辨率,此时获取到的 Width 与 Height 是 515×916,如果改变 Game 窗口大小,这个值也会变,请问这个具体规定是怎么的呢?

发现应该是乘以了对应分辨率下的 Scale 值,比方在 720×1280 的分辨率下看 Game 窗口的 Scale 值是 0.741,切成 9:16 后的分辨率正好是 533×948(720×0.741 : 1280×0.741)。当初有 API 能获取到这个值么?

因为有一些 UI 操作,比方会把一张图设为和屏幕一样大的大小,但在 Editor 下 UI 分辨率是 720×1280,所以会和冀望的值不一样。如果把分辨率设为 720×1280(也是 9:16),那么获取到的值就是对的。

次要是想晓得规定,而后能依据 515×916 换算进去 720×1280。

A:编辑器下,如果 Game 窗口采纳的比例(Aspect Ratio)的模式,Screen 获取的就是 Game 窗口的理论大小。如果 Game 窗口采纳的是固定分辨率(Fixed Resolution)。Screen 获取的就是设定的窗口大小。

感激张首峰 @UWA 问答社区提供了答复

封面图来源于网络


明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在 UWA 问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA 学堂:edu.uwa4d.com
官网技术 QQ 群:793972859(原群已满员)

正文完
 0