动画相关文件存放在
Asset/Resources/Prefab/HeroAnim/
每个英雄命名一个文件夹, 比如 Hero_A_001, 最好和hero_config表格里的 Hero_L_001配对 (把L换成A)
文件夹中,存放4个文件(以及对应的meta文件),名字都和目录保持一致。分别是
Hero_A_001.png | 切好部件的图片 |
Hero_A_001.prefab | 程序引用的预制体 |
Hero_A_001.anim | 待机动画文件 |
Hero_A_001.controller | 待机动画控制文件 |
如图所示
hero_config新增了一个anim字段,负责引用动画文件。
如果动画文件存在,则优先动画,否则使用pic字段的大图
会出现立绘的地方,都可以被替换成动画文件。
主要有:
* 战斗敌人界面
* 大卡界面
* 英雄升级界面
使用这样的代码
UIFeatureHero.SafeSetHero(Img_HeroIcon,h_config);
代替原来的,UIFeatureCommon.SafeSetIcon(Img_HeroIcon,h_config.pic);
由于动画预制体是SpriteRenderer而不是Image 和原来会有若干不同参考后面两个章节
实现细节包含
* 1/清除原来的动画预制体
* 2/尝试加载预制体,如果失败则以普通图片形式加载
* 3/根据一套计算规则,使得预制体和原来的image一致,推算的公式是 100*(Image的尺寸)/(原始图片的尺寸)
* 4/根据一套计算规则,校准坐标中心,推算的公式是 0.5-Image.pivot.y * Image的高度
* 5/修改了 shader和UICMaterialCtrl 使得动画可以同时控制 动画预制体 和 图片Image的 颜色变化。其中用raw_color来控制颜色而不是直接用定点色,在动画中需要注意。参考下一节:动画注意
* 6/让SpriteRenderer的sortingLayer和sortingOrder和pic一致, 这样可以保证SpriteRenderer能正确显示。但会遮挡在同层的所有东西上面,所以需要把下面的UI控件提高层级。
* 美术需要保证 预制体可以自动循环播放待机动画
* 在战斗场景中的缩放动画。只需要针对上层的pic节点制作就可以了,动画体是他的儿子,可以跟随动画
* 变色动画 分为 基础变色 和 Tint变色 。(前者是乘法,后者是叠加)
SpriteRenderer 和 Image 在实现上有所不同。
不能靠编辑器里的上下关系来确定显示层级。但是 sortingLayer(排序层)和sortingOrder(层内顺序)是有效的
所以我们可以让 英雄立绘/动画 下面的UI控件,都提高一个层级内顺序就可以解决这个问题。
如果下面的控件有交互,需要添加Raycast组件
部分页面,不使用这样的方法,我才用了一些其他手段。
比如PanelCommonHeroDetail ,会导致上面再覆盖一个Dialog的时候,出现层级错乱。
对策是我把PanelCommonHeroDetail直接修改成 EFFECT 层
https://blog.csdn.net/HuLuGuai/article/details/82797061
这篇文章讲了unity 老版的 切片动画和这个 animation2d新版动画的介绍。 新版会方便很多,也可以新老结合来做。
老版比较适合做刚体,也就是硬切块的动画
https://blogs.unity3d.com/2018/11/09/getting-started-with-unitys-2d-animation-package/
官网关于切块的做法视频
内部层级的做法,是设置骨骼的深度值,越大越靠前
TODO: 异步加载