1.fairygui vs ugui

fgui 与 ugui对比各有优缺点,但是个人更加偏向于fgui。确实fgui的功能比ugui完善太多。

例如:

ugui想要在ui中插入例子特效,需要自己进行层级管理,否则会出现粒子群盖住ui等bug。而fgui只需要

事先在editor中用一个graph进行占位即可,在运行时通过wraper把粒子器生成在graph下面,其层级自动为graph的层级。

开发者不必为乱七八糟的层级而做“特殊处理”。关于fgui其他有点就不在此做讨论了。

那么由此引申一个问题:假如我要在UI中加入一个Spine动画,我如何在spine动画和UI大小能够匹配起来?

2.fairygui适配原理

2.1 UI摄像机

接触过fgui的都知道,fgui通过stage camera来绘制。stage camera如下图

camera为一个正交摄像机,其size为5

size定义为:屏幕高度/2

反向推测,我们摄像机能照到高度为10个单元(10个cube长度)。

2.2 UI设计

1.stage的缩放

以1080 * 1920设计的分辨率为例。1920在unity里面为1920个单元(1920个cube长度)

而我们的摄像机只能够看到10个单元,所以UI的根节点stage缩放的比列为 10/1920 = 0.005208333

同样我们在fgui源码中得到论证(upp的值)。

2 .GRoot 的缩放

GRoot 的缩放为根据用户的缩放模式,算出的设计分辨率和实际分辨率的缩放比例。参考FGUI官方教程

以1080 * 1920设计的分辨率为例,如果屏幕分辨率为720 * 1080 则Groot的缩放为 0.6666667。

如果屏幕分辨率为1080 * 1920 则Groot缩放为1.

所以某个UI节点的总缩放为 _G.GRoot.inst.scaleX * _G.Stage.inst.scaleX

3.Spine的缩放

如果我们把spine放入UI中,由上诉推论得知spine的父节点缩放为 scaleX = _G.GRoot.inst.scaleX * _G.Stage.inst.scaleX

所以我们需要把spine放大到 1/scaleX 倍,例如spine节点缩放为0.1 , 则spine的scale需要变为10,让其不受父节点缩放的影响。

所以spine的缩放为

scaleX = _G.GRoot.inst.scaleX * _G.Stage.inst.scaleX

scaleX = 1/scaleX

这样就完了吗?答案是否定的。

我们的spine也是由stagecamera 绘制的,而stagecamera的size为 5 ,只能看到10个单元的高度。

而我们美术设计spine也是按照1080 * 1920 的尺寸来设计分辨率尺寸的。和fgui1920不同的是 fgui的单位为单元(cube长度)

它表示的是 1920个cube长度,而spine的单位为像素(100个像素为1单元)。

spine的设计高度为1920个像素,它等同于19.2个单元,但是我们的摄像机只能看到10个单元高。所以spine的scale还需要 除上一个spine的缩放比。

即  scaleX = scaleX/1.92。

完整代码如下:

4 结束语

上诉论证全是笔者自己推论的,且在项目中验证。如果读者发现有bug或则有更方便的方式进行适配,欢迎大家指正。

fairygui 与 spine动画的适配处理相关推荐

  1. unity spine动画渐变效果(UGUI及fairyGUI )

    unity spine动画渐变效果(UGUI及fairyGUI ) 查阅了一些资料,大部分都是直接去修改整个动画的alpha值.比如说spine动画默认shader为 更改成,此时修改shader的a ...

  2. Unity使用FairyGUI切换Spine

    先说Unity使用Spine动画,这是从其他地方抄来的:原文链接:https://blog.csdn.net/linshuhe1/article/details/79792432 运行库导入 关于运行 ...

  3. unity 在代码中创建spine动画组件

    项目中用到了spine动画,使用Assetbundle打包后,在手机上运行会出现丢材质的情况.如果不进行打包,直接放到Resources目录下是可以正常加载的,但是,这样包就会很大,而且也不能进行热更 ...

  4. 动态修改spine动画渲染层次

    在unity中做2D游戏开发的时候我们使用sprite比较多,sprite的层次修改我们手动修改sprite renderer下面的Order in Layer属性就行了.也可以动态的获取它的层次属性 ...

  5. Spine动画 导入COCOS和U3D

    原创 好久没写教程了,主要是太忙了,最近一直在搞网狐的开发,网狐的代码确实不错,手头上做的棋牌外包,同时遇到要将SPINE动画导入U3D和COCOS,网上一般的使用教程很多的,但是很多坑点没有说到,我 ...

  6. Cocos Creator 基于 Spine 动画的 AVATAR 换装系统优化

    很多游戏开发团队都正在使用 Spine 动画软件来制作人物 AVATAR 动画.今天,玩吧技术专家组的红孩儿将以玩吧 APP 中的游戏<噜噜喵>为例,同大家分享基于 Spine 动画的 A ...

  7. CocosCreator播放spine动画

    青葱烈马,不负韶华. 记录spine动画的简单使用 播放spine动画 @property({ type: sp.Skeleton, displayName: '_人物' })private spr_ ...

  8. unity 角色鉴赏 spine动画鉴赏人物

    基本实现需求: 一.人物: 1.人物的左右自由切换,人物是spine动画 2.人物移动到最左边时左移键消失,右移到最右边时右键小时 3.点击人物时人物站立动画切换摆pos,移动时不能点击动画切换 二. ...

  9. CocosCreator之Spine系列(一):spine动画回调

    spine动画的回调,在creator的文档里有明确标识: 1.setCompleteListener 用来设置动画播放一次循环结束后的事件监听. 写法如下: /*** spine动画入口方法* @p ...

  10. Spine动画导入报错 : Could not automatically set the AtlasAsset for “xx“.you may set it manually

    将Spine动画拖到unity中的时候,无法正确生成对应资源,并且报错 Could not automatically set the AtlasAsset for "xx".yo ...

最新文章

  1. Python爬虫小偏方:如何用robots.txt快速抓取网站?
  2. 官宣弃用Java 8!Kafka 3.0.0 新功能get
  3. django mysql5.7_GitHub - qiubiteme/DjangoBloger: 一个Django2.0+mysql57,实现的响应式博客
  4. 真正的男人要勇于承担责任......
  5. Python之异常追踪模块:traceback
  6. git add 命令的一个习惯用法:逐个挑选改动
  7. 一步一步教你Pycharm的配置Python环境
  8. 将Myeclipse非maven项目,导入到IDEA
  9. IEEE论文模板下载地址及说明
  10. 数据可视化1—蒙特卡罗光线追踪
  11. LVGL V8之Event bubbling
  12. 硬刚ChatGPT!文心一言能否为百度止颓?
  13. 树木根际微生物、树木-真菌互作研究方向博后和出站博后
  14. Ubuntu 远程控制(使用自带远程工具)
  15. java2048小游戏源码及解析_200行java代码实现2048小游戏
  16. Web前端(一)HTML超文本标记语言
  17. XAMPP的MySQL配置
  18. pip更换源,换成国内镜像
  19. 微信小程序input框只能输入小数/正整数
  20. Flink(八)Flink的Parallelism并行度

热门文章

  1. 万能硬盘数据恢复软件注册码真的可以用吗?
  2. 2022年浙江省电子设计大赛C题小车跟随系统
  3. VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
  4. SQLServer 2016报错Microsoft R Open 和 Microsoft R Server的解决方案
  5. java 各种架构图汇总
  6. 硬盘坏了怎么恢复数据,需要哪些设备
  7. xp系统internet信息服务器地址,XP系统下Internet信息服务IIS的安装方法
  8. R语言大小写字母转换
  9. 世界中英文国家及国家代码
  10. 怎么选PMP培训机构?