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是515x916,如果改变Game窗口大小,这个值也会变,请问这个具体规定是怎么的呢?

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

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

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

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(原群已满员)