1)安卓包在真机上安装时的“危险提醒”问题
2)iOS下AssetBundle的加载疑难
3)特效用粒子系统,模拟器里呈现花屏问题
4)IL2CPP编译的Protobuf,反射类运行时报空


这是第321篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。

UWA社区主页:answer.uwa4d.com
UWA QQ群:465082844

Android

Q:最近在安卓真机上安装游戏的过程中忽然呈现了危险提醒(以前没有)。有的手机甚至须要输出明码受权能力装置。

如图:

不晓得有没有大佬们最近也遇到了这样的问题,可否提供个批改的思路?

A:首先是32位问题,这个是必然要降级的不要挣扎了。至于危险提醒和明码受权,都是国内手机的问题。Rom外面限度了你不上架它的商店就会有这种提醒。OPPO限度了adb间接装置,每次要明码受权。

这些都属于研发层面无从下手的问题,能做的就是倡议玩家别用国产手机。

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

AssetBundle

Q:iOS下AssetBundle加载时候Animator下面失落AnimatorController。

问题:
1.0版本里A.prefab是打在AssetsBundle1外面,A.prefab援用的AnimatorController 是打在AssetsBundle2外面,A.prefab上援用的其余资源在AssetsBundle3外面。

2.0版本热更新时,扭转了援用文件的文件夹,A.prefab上援用的AnimatorController生成的Bundle变到了AssetsBundle3外面,A.prefab上援用的其余资源生成的Bundle变到AssetsBundle2外面。

A.prefab所在的AssetsBundle1没有变动,所以热更新上来的是AssetsBundle2和AssetsBundle3。

热更新之后加载AssetsBundle2和AssetsBundle3,再加载AssetsBundle1,运行后发现A.prefab上的Animator组件还在,然而下面的runtimeAnimatorController失落了,变成了Missing。

有人遇到这个问题吗?

A1:有一些排查思路,首先在Android平台看下是否也有问题,排除下是否是与平台相干。另外在出问题的机器上预制体模式,如果失常则应用AssetBundle模式来加载看下是否失常,如果是Bundle问题,那能够齐全删除波及到的Bundle从新打一遍再试一下。

感激Knight-132872@UWA问答社区提供了答复

A2:Unity上遇到这种问题,最好把A、B、C 3个AssetsBundle包先删除,再打包,让Unity全新生成,应该就好了。

感激1 9 7 3-311135@UWA问答社区提供了答复

Simulator

Q:游戏特效用了粒子系统,其余平台都失常,就在模拟器下呈现了花屏问题,时不时地花屏闪动。

特效用了粒子系统的Mesh和Billboard两种模式,而后粒子上挂材质球,是用本人写的Shader,然而切换成Unity自带的URP粒子系统Shader,也一样花屏。不必粒子系统就不会花屏。

用RenderDoc抓帧,只剖析出局部花屏,是用Mesh模式的粒子网格,顶点产生拉扯偏移产生的。然而其余花屏,查不出是哪个对象产生的问题,谁晓得是怎么回事吗?

A1:能够尝试换一下Shader的采样精度。

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

A2:能够尝试一下把粒子特效对应Shader变量类型从fixed改为half或者float。

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

针对以上问题,有教训的敌人欢送转至社区交换分享

Build

Q:IL2CPP编译的Protobuf,反射类运行时报空。
问题产生时,会闪崩,闪崩日志信息:
Error_Not_Null:"c# exception:System.TypeInitializationException: The type initializer for ‘abcConfigReflection’ threw an exception. —> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> System.ExecutionEngineException: Attempting to call method 'Google.Protobuf.Reflection.ReflectionUtil+ReflectionHelper`2[[System.IntPtr&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]::.ctor’ for which no ahead of time (AOT) code was generated.\n
...

(残缺日志信息,请见原问答。)

看下来是因为AOT编译时,代码剔除所致,问题十分偶现。咱们的QA基本上没有跑进去过这个问题,然而放到外网就有一堆玩家遇到此问题。蹊跷的是哪怕同一个手机也是偶尔才报。

Proto GitHub我的项目有人提过这个问题,包含上面回复次要提了两点:
1. Linker蕴含Google.Protobuf程序集
2. AOT编译器不会为T为Any Enum的泛型办法,针对枚举参数泛型办法创立显式调用类
https://docs.unity3d.com/cn/c...

和我这个问题不同点是,abcConfigReflection是一个类,不是枚举,而且整个我的项目这个类会有很多。

我用的Proto 3.6.1版本,而且Proto也在3.6.0版本批改了
> AOT generics issues in Unity/il2cpp have a workaround (see commit 1b219a1 for details)

Protobuf源码的确加了强制反射的代码:

    static FileDescriptor()    {        ForceReflectionInitialization<Syntax>();        ForceReflectionInitialization<NullValue>();        ForceReflectionInitialization<Field.Types.Cardinality>();        ForceReflectionInitialization<Field.Types.Kind>();        ForceReflectionInitialization<Value.KindOneofCase>();    }

当然我有加Google.Protobuf程序集到Linker,还是不能解决。起初我加了Assembly-CSharp程序集到Linker,也就是整个自定义代码全副不剔除,目前因为不不便放外网,也不分明有没有解决这个问题。

应用Protobuf序列化数据按讲是惯例操作,置信应该有很多人遇到,不晓得大家解决计划是什么,有没有解决这个问题?

针对以上问题,有教训的敌人欢送转至社区交换分享

封面图来源于网络


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

官网:www.uwa4d.com
官网技术博客:blog.uwa4d.com
官网问答社区:answer.uwa4d.com
UWA学堂:edu.uwa4d.com
官网技术QQ群:465082844