关于animation:关于Addressable打包图集与图片都打进去造成冗余

1)对于Addressable打包图集与图片都打进去造成冗余2)Unity如何计算Root动画旋转3)IL2CPP编译的Protobuf反射类运行时报空4)为什么Active Constraints会呈现过高的景象 这是第337篇UWA技术常识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地把握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:465082844 AddressableQ:对于Addressable打包图集与图片都打进去造成冗余。 Unity版本:2021.2.13f1c1Addressable版本:1.19.16(cn版本) 应用的是Addressable的默认Group,场景中只应用了decal3的UI图片,然而打包最初的资源,Addressable的包中蕴含了两个资源,失常应该只有图集资源才对(如下图)。 另外,看了Addressable打包流程的代码,Unity把关联的图片退出依赖打包列表,然而又在之后对图片检测做了生成图集的解决。原生打包不会对图集里的图片再做解决吗? A:能够切换com.unity.ScriptableBuildPipeline版本到1.21.5试试看,1.21.5修复的问题应该包含这个。更新日志:https://docs.unity3d.com/Packages/com.unity.scriptablebuildpi...感激liuxianfeng@UWA问答社区提供了答复 AnimationQ:想理解Unity的RootMotion的实现细节,请问Unity是怎么计算Root动画旋转的? 一个动画,如果配置正确,AnimationClip里会多两段曲线数据,RootT、RootQ别离是根节点的位移和旋转信息。然而当我用Animator跑起来后,咱们每帧RootMotion旋转多少,Root节点逆向旋转多少,是怎么计算出来的呢? 奢侈的想法是:旋转以后帧的RootQ绝对于第0帧RootQ的旋转的eulerAngles.y。然而通过我屡次测试,并不是这个值,而是有偏差的一个值。有时候多几度,有时候少几度。 没有Unity源码的状况下,很难晓得它的计算方法。我去看了Godot,其办法是失常把以后旋转和第0帧做差值。 比方这个动画,我曾经把数据删得差不多了。第1帧,Animator认为应该转24.068,这两个旋转的欧拉角示意别离是(277.77, 66.96, 81.36) 、(279.53, 74.28, 100.03),from to旋转的欧拉角是(3.29, 25.78, 0.02) 。这个25.78和24差得不多,然而总归不一样。其余测试数据相似,都是差一点。 A:对于旋转的计算,Unity应用了四元数(Quaternions)来示意旋转。旋转的差别可能是因为以下起因之一导致的: 欧拉角(Euler angles)转换为四元数的过程中可能存在精度损失。欧拉角存在万向锁问题和旋转程序问题,这可能导致从欧拉角转换为四元数时呈现不精确的后果。根节点旋转的计算可能受到其余因素的影响,例如动画过程中的插值算法、关键帧的设置、平滑过渡等。这些因素可能会导致计算结果与冀望的差别。感激NG週@UWA问答社区提供了答复 ScriptQ:IL2CPP编译的Protobuf反射类运行时报空,问题产生时,会闪崩,闪崩日志信息:ErrorNotNull:"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 ...

May 30, 2023 · 2 min · jiezi

关于animation:在UI上制作动画的方案选择

1)在UI上制作动画的计划抉择2)AssetBundle依赖加载问题3)TTF字体如何渲染未蕴含的字符4)Unity 2020.3 应用HDRP渲染管线启动我的项目很卡 这是第278篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AnimationQ:在UI上做动画是应用Animation还是Animator呢?或者有什么更好的计划吗? A:之前专门对这个问题做过测试,在场景中用3种办法实现同样的动画。 复制10份和50份同样的动画,测试数据如下: 从耗时上看,Dotween是最优的,所以对于比较简单的动画,倡议尽量应用Dotween来实现。 感激Xuan@UWA问答社区提供了答复 AssetBundleQ:对于AssetBundle依赖加载的问题,比方一个公共资源A,有很多(B、C、D、E…)Bundle都援用了A。实践上是先加载公共资源A,再加载(B、C、D、E…),然而在不同中央可能(B、C、D、E…)会同时加载,那么A是不是加载了很屡次,这种状况是要如何解决呢? A1:B、C、D、E筹备加载A时,如果发现A已加载就跳过,加载中就追加一个回调,未加载才须要触发加载A。感激黄晓文@UWA问答社区提供了答复 A2:曾经加载过的Bundle要记录下来:Dictionary<string,AssetBundle>,那么天然曾经加载过的AssetBundle就不必再加载。 另外AssetBundle还要做援用计数,援用为0就Unload,不懂就看Addressable的源码。 感激Jee@UWA问答社区提供了答复 A3:Unity的AssetBundle治理其实还是须要本人去手动做。如果一个AssetBundle被反复加载,那么引擎会间接报错。所以就像楼上说的,搞一个数据结构和容器通过援用计数去全程跟踪记录AssetBundle的加载及应用情况。感激黄程@UWA问答社区提供了答复 FontQ:一些TTF字体,其中只蕴含了英文数字标点等无限的几百个字符,当我用这个字体显示中文的时候,能够显示,单并不是字体的格调,他是如何做到的?Fallback到其余零碎默认字体吗? A:能够浏览一下官网文档,有比拟具体的阐明:https://docs.unity3d.com/Manu... “When Unity tries to render text with a dynamic font, but it cannot find the font (because Include Font Data was not selected, and the font is not installed on the user machine), or the font does not include the requested glyph (like when trying to render text in east Asian scripts using a latin font, or when using styled bold/italic text), then it will try each of the fonts listed in the Font Names field, to see if it can find a font matching the font name in the project (with font data included) or installed on the user machine which has the requested glyph. If none of the listed fallback fonts are present and have the requested glyph, Unity will fall back to a hard-coded global list of fallback fonts, which contains various international fonts commonly installed on the current runtime platform.” ...

December 15, 2021 · 1 min · jiezi

关于animation:htmlcss画呼吸灯

搞不了视频太难了。。。。 Animations是css3的一个模块,应用keyframes定义如何随着工夫的挪动扭转CSS的属性值,能够通过指定它们的持续时间,反复次数,如何反复来管制关键帧的行为。Animations由两局部组成:css动画的配置,以及一系列的keyframes(用来形容动画的开始、过程、完结状态) transform 属性向元素利用从2D或3D转换。该属性容许咱们对元素进行旋转、缩放、挪动或者歪斜 <!-- * @Author: [you name] * @Date: 2021-08-12 17:00:29 * @LastEditors: [you name] * @LastEditTime: 2021-09-16 22:27:09 * @Description: 呼吸灯的实现 用transform和animation实现--><!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .bg { width: 500px; height: 500px; margin: 50px auto; background-color: rgb(217, 255, 2); position: relative; } .bg .small_cirlce { width: 300px; height: 300px; border: 20px solid white; /* 程度居中 */ top: 50%; left: 50%; margin-top: -150px; margin-left: -150px; position: absolute; /* 变成边框盒子 它的宽高是整个盒子的宽高 */ /* 因为边框占据了40px 所以用内容盒子的话会使其不能居中 所以要转换成边框盒子 */ box-sizing: border-box; border-radius: 50%; /* 设置动画 自定义动画名称circle ease-in-out:动画以低速开始和完结 infinite示意有限次执行*/ animation: circle 5s ease-in-out infinite; } .bg .big_circle { width: 400px; height: 400px; border: 10px solid white; /* 设置程度居中 */ top: 50%; left: 50%; margin-top: -200px; margin-left: -200px; position: absolute; /* 变成边框盒子 它的宽高是整个盒子的宽高 */ /* 因为边框占据了20px 所以用内容盒子的话会使其不能居中 所以要转换成边框盒子 */ box-sizing: border-box; border-radius: 50%; /* 设置动画 自定义动画名称circle ease-in-out 动画以低速开始和完结 infinite:有限次执行*/ animation: circle 5s ease-in-out infinite; } /* 设置动画 */ @keyframes circle { /* transform 属性向元素利用从2D或3D转换。该属性容许咱们对元素进行旋转、缩放、挪动或者歪斜 */ 0% { /* 扭转大小 缩放 scale */ transform: scale(0.6); border-color: rgb(255, 3, 3); } 25% { /* 扭转大小 */ transform: scale(0.7); border-color: rgb(243, 5, 183); } 50% { /* 扭转大小 */ transform: scale(0.8); border-color: rgb(5, 101, 245); } 75% { /* 扭转大小 */ transform: scale(0.9); border-color: rgb(77, 248, 10); } 100% { /* 扭转大小 */ transform: scale(1); border-color: rgb(2, 236, 244); } } </style></head><body> <div class="bg"> <div class="small_cirlce"></div> <div class="big_circle"></div> </div></body></html> ...

September 16, 2021 · 2 min · jiezi

关于animation:实现多个元素的css动画同时执行

css动画是队列式的,以后一个动画执行完才会执行下一个动画,也就是你删除了动画类名,认为革除了动画,其实只是将动画暂停而已,想要动画每次都是从新开始的解决办法是,在css里再写一个截然不同的动画,两个动画类名来回切换就能每次从新开始了,比方: <template> <div> <div v-for="(item,index) in list" :key="index" :class="[active===index?'':show?'changeColor':'changeColor2']" @click="changeColor(index)">色彩</div> </div></template><script> export default{ name:"color", data(){ return { list:[ {name:"a"}, {name:"b"}, {name:"c"} ], show:true, active:0 } } methods:{ changeColor(){ this.active=index; this.show=!this.show } } }</script><style>@keyframes colors { 0%{ color: red } 100% { color: yellow } }@keyframes colors2 { 0%{ color: red } 100% { color: yellow } } .changeColor { animation:colors 5s linear 0s infinite; -webkit-animation:colors 5s linear 0s infinite; } .changeColor2 { animation:colors2 5s linear 0s infinite; -webkit-animation:colors2 5s linear 0s infinite; }</style>

July 29, 2021 · 1 min · jiezi

关于animation:自如大前端web动画探索一

前端我的项目直面客户,为了更好的交互体验,免不了须要应用动画来增香提味。在此分享自若动画的尝试与摸索。 一、简略的过渡成果transition应用transition实现:位移、旋转、缩放、透明度等简略过渡成果。 长处:晦涩、简略。 毛病:仅能实现简略动画,仅能监控动画完结(transitionend),无奈实现用户交互。 transitionend(完结)事件监控:<template> <div class="box1" ref="box1" :class="{move: isMove}" @click="isMove=!isMove"></div></template><script lang="tsx">import { Component, Vue } from 'vue-property-decorator';@Component({ name: 'index' })export default class Index extends Vue { private isMove: boolean = false; private transitions: any = { 'transition':['transitionend'], 'OTransition':['otransitionend'], 'MozTransition':['mozTransitionEnd'], 'WebkitTransition':['webkitTransitionEnd'] }; mounted(){ let _style = (this.$refs.box1 as any).style; for(let t in this.transitions){ if( _style[t] !== undefined ){ this.transitions[t].map((element:string)=>{ (this.$refs.box1 as any).addEventListener(element, ()=>{this.callBack(element)}, false); }); } } } callBack(type:string){ // do something console.log(type); // transitionend }}</script><style lang="scss" scoped>.box1{ width: 100px; height: 100px; background: #999; transition: all 0.5s; &.move{ transform: translateX(100px); }}</style>二、逐帧动画动画的速度曲线 animation-timing-function : ...

February 3, 2021 · 4 min · jiezi

关于animation:带BlendShape表情的动作文件播放异常

1)带BlendShape表情的动作文件播放异样2)Unreal打包Android我的项目的报错3)Unreal打包Android我的项目前,执行SetupAndroid.bat脚本报错4)Addressable打包Post Processing产生冗余5)Addressable资源热更新,提醒CRC Mismatch 这是第229篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AnimationQ:从Maya中导出一个带表情的动作,动作能够失常播放,然而表情不能播放,请问这是为什么?在FBX导入设置窗口,表情是能看到的,然而放到场景里却看不到。能够看到动画节点,但所有的BS节点都显示Missing。 A:Maya的表情动画,间接在Unity里播放不进去。我拆散到Animation,而后用一个插件,从新绑定BS节点,就能够播放了。可参考以下网址:https://github.com/chr33z/unity-blendshape-mapper感激题主韩飞@UWA问答社区提供了答复 EditorQ:Unreal打包Android我的项目,报错如下图所示,请问是什么起因? 具体报错可参见原问答。 A:提供以下解决方案,亲测无效:Unreal我的项目打包进行环境配置的时候,在对应模块的.Build.cs文件中,要增加对应代码:PublicAdditionalLibraries.Add(Path.Combine(externalLib, “Android/armeabi-arm64/liblua.a”));PublicAdditionalLibraries.Add(Path.Combine(externalLib, “Android/armeabi-v7a/liblua.a”));PublicAdditionalLibraries.Add(Path.Combine(externalLib, “Android/x86/liblua.a”)); 但如果打包的我的项目,不产生的我的项目要移除对应的代码。例如只打包armv7的我的项目,就要移除x86和arm64对应的代码。 该问答由UWA提供 EditorQ:Unreal打包Android我的项目前,配置环境下执行SetupAndroid.bat脚本遇到“此时不应有Microsoft”的报错,请问是什么起因? A:在PATH环境变量中删除含有Microsoft字段的门路即可,可参考:https://answers.unrealengine.com/questions/963972/view.html该问答由UWA提供 AddressableQ:有多个摄像机的Prefab,每个摄像机都挂了后处理,Prefab都调配了Addressable地址。运行Analyze Rules后没有显示PostProcess资源有冗余,导致打包进去每个Prefab都挂了Package外面的资源。 应用版本如下:Unity 2018.4.27Postprocess 2.30Addressables 1.16.1 A:通过测试,Addressable 1.15.1版本,应用Analyze工具是能够检测进去冗余的,用1.16.1就不行,前面的1.16.10也不行,不晓得Addressable批改了什么,比对了1.15.1和1.16.1的代码,没看进去是什么导致的。感激Xuan@UWA问答社区提供了答复 AddressableQ:Addressable资源热更,提醒CRC Mismatch问题,将须要热更的资源曾经上传至CDN对应目录,启动游戏报错如下,不晓得什么问题,大家有遇到吗? A:曾经解决,按官网解决形式,先禁用。感激题主在路上哈哈@UWA问答社区提供了答复 封面图起源:Vox BlendUnity的BlendShape控制器插件。 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:793972859(原群已满员)

December 15, 2020 · 1 min · jiezi

关于animation:使用SBP后如何查询Bundle的依赖关系

1)应用SBP后,如何查问Bundle的依赖关系2)大量同样的怪物的骨骼动画如何优化3)DynamicBone动静骨骼插件是否在我的项目里应用4)音频换Wwise的老本5)运行时如何保留Prefab 这是第225篇UWA技术常识分享的推送。明天咱们持续为大家精选了若干和开发、优化相干的问题,倡议浏览工夫10分钟,认真读完必有播种。 UWA 问答社区:answer.uwa4d.comUWA QQ群2:793972859(原群已满员) AssetBundleQ:应用ContentPipeline.BuildAssetBundles接口打出Bundle文件后,没有产生AssetBundleManifest文件,请问该如何查问某个Bundle所依赖的其余Bundle呢? A:能够从ComatibilityBuildPipeline.cs的源码外面看到上面的代码, 用上图中的办法来生成Manifest对象,而后参考《应用SBP打Bundle如何读取AssetBundleManifest》生成资源文件和打包AssetBundle。 感激Xuan@UWA问答社区提供了答复 AnimationQ:大量同样的怪物的骨骼动画应该怎么优化? 1.如果有N个怪物,是否同样的骨骼动画会计算N遍来失去每个Mesh的新的顶点地位。2.如果1是对的,是否计算完一个怪物在动画这一帧的顶点地位后,其余怪物都用这个计算好的后果进行渲染。 第二个问题的这个办法我认为是和GPU Instancing的贴图动画是有区别的。不晓得第二个办法有没有实现的可能,或者曾经有人实现了吗? 就是这一群模型体现都一样,变换矩阵每一帧都一样。请问Shared SkinnedMesh计划是什么思路,或者有没有参考链接? A:请参考以下答案:1.不同模型的动画序列帧不同,骨骼的变换矩阵必然有差别,除非这一群模型体现都一样,能够本人写一套Shared SkinnedMesh的计划。如果须要在CPU端蒙皮把Shader中的蒙皮计算拿进去就好。 Shared SkinnedMesh的计划参考:https://lab.uwa4d.com/lab/5bc6f85504617c5805d4eb0a 2.GPU Instancing的计划也是通过将序列帧骨骼动画烘培到贴图中,而后在顶点着色器中实现蒙皮计算的过程。 具体细节可参考:《移动游戏开发核心技术解说:3D UI、GPU Skinning和DOTS》中GPUSkinning相干内容。 感激羽飞@UWA问答社区提供了答复 AnimationQ:DynamicBone动静骨骼插件有人测试过性能吗?是否倡议在我的项目里应用? A1:这插件的性能真费,我的项目里配角30根骨骼用上这个插件后,高端机每帧耗时1ms。2集体就是2ms了。感激剑影蒙残@UWA问答社区提供了答复 A2:能够用,然而不能大面积用,最好用在重点对象上,适宜搞一些骚操作。感激与我相干@UWA问答社区提供了答复 A3:齐全能够应用。咱们上一个我的项目中有大量的舞蹈动作,最多反对16人的同台表演。在服装制作上应用了和DynamicBone相似的Unity日本开源的UnityChan中的SpringBone。同时进行了魔改,退出了横向束缚避免在抬腿等大幅度动作时的穿模。魔改后的版本计算量比原版更大。 这类弹簧骨骼零碎的计算量次要在两方面,一方面是计算弹簧间的力传导,另一方面是计算碰撞,都是重CPU的计算,是非常适合放入子线程去做的。刚好能够利用Unity的ECS来进行优化。 目前网上开源的实现中,能够参考下https://github.com/EsProgram/uSpringBone的实现。但因为ECS目前还未正式Release,所以稳定性不是特地好。 前段时间在逛AssetStore时,发现一个新的插件,应用JobSystem+BurstCompiler,举荐你们去看看。 MagicaCloth 感激范君@UWA问答社区提供了答复 AudioQ:咱们当初Unity原生的音频,应用的是一个Resonance-Audio插件,可能咱们本人也没用好,但能凑合着用。 据说Wwise不错,打算都换上。但昨天下载了一天没装置上,而且和现有音频不能一起用,不知大家是否也遇到过这样的问题,有没有什么好的思路? 大家在我的项目中途转Wwise的老本大吗? A1:咱们也转了Wwise,与原生的确不能共用。须要把现有的音频放到Wwise工程之后,再分平台对立导出,Wwise导入导出以及治理还是蛮不便的。装置也是装了两三遍才装完。Wwise Launcher软件和Unity Intergration仿佛是分两次下的,集成入Unity工程须要等那个页面反馈一下,否则一不小心又会点到下载。 问题的确在装置,设置,打包,打热更都会有一点。 链接里是我碰到过的几个问题,尽管不是很全,能够参考看看:https://kmageek.com/2020/06/23/wwiseUnity/ 感激Maggie@UWA问答社区提供了答复 A2:做好音频文件和我的项目工程的解耦(音频播放配表,不是通过Prefab关联),转过去会很不便,Wwise通过Bank加载、ID播放,做好ID和音频名称的映射。个别会进行二次开发,在Editor做个Bank解析、播放、关联的小标签会不便策动配置。感激郑骁@UWA问答社区提供了答复 ScriptQ:运行时代码克隆了一个Prefab,而后我改了坐标或者角度,如何再保留回Prefab? 我这个保留的数据只是举了简略的例子,理论是运行时美术会改特效特效Particle system外面一堆参数的。 A1:倡议应用ScriptableObject来实现相干性能。不同对象的参数调整要离开思考。如果是粒子系统,编辑模式下根本都能够调了。大部分参数在编辑模式下调好,十分大量的能够在运行模式下调。调好后拷贝一下,而后退回编辑模式粘贴一下应该也能够了。 当然也能够把一些参数提出到ScriptableObject,调这个序列化,每次运行启动的时候赋值给指标对象。如果有必要也能够做个按钮,运行时按后间接去批改Prefab内的值,只是这样解决起来比拟麻烦。不是很大很简单的需要还是尽量避免。 其余的一些Prefab内编辑器模式下不不便调的,还是倡议提出到ScriptableObject来解决更好。 感激黄程@UWA问答社区提供了答复 A2:PrefabUtility.SaveAsPrefabAssetAndConnect感激与我相干@UWA问答社区提供了答复 封面图来源于网络 明天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题兴许都只是冰山一角,咱们早已在UWA问答网站上筹备了更多的技术话题等你一起来摸索和分享。欢送酷爱提高的你退出,兴许你的办法恰能解他人的当务之急;而他山之“石”,也能攻你之“玉”。 官网:www.uwa4d.com官网技术博客:blog.uwa4d.com官网问答社区:answer.uwa4d.comUWA学堂:edu.uwa4d.com官网技术QQ群:793972859(原群已满员)

November 5, 2020 · 1 min · jiezi