在UI动画上花费精力,最早是日本的游戏喜欢搞,欧美的游戏都非常不重视(比如暗黑2),其实我也不懂为何日本游戏这么重视这种东西,因为早期做这种东西还挺麻烦的,大概是他们对于小而美的追求吧……总之,后来的欧美游戏把日本游戏的优点全部学了去,铸就了现在的霸主地位。
而这个问题的答案也很简单:设备能跑,为什么不做?为什么其他部分需要动画UI就不需要,难道UI就不算美术的一部分了?
要说我,国内极端不重视UI动画,大概也是受了暗黑等一系列早期欧美游戏的影响。
虽然肯定会有人说自己就是不喜欢UI动画,因为浪费时间,但游戏里什么元素不浪费时间呢?而且苹果的成功,也证实了一般人在娱乐产品里其实是更倾向于有UI动画存在的。
所以我标题上虽然写了主机游戏,指的其实是这种理所应当该有的UI动画,用这个词是方便大家理解,毕竟现在只要是个优秀游戏它的UI动画都是做得很不错的,不管在哪个平台。
这本来就是该做的事。
更何况,实现上,也并不困难。
使用Animator而非DoTween
你我都清楚现在游戏里仅有的UI动画是怎么做的。
但是代码实现的动画其实是很不方便的,它只适用于简单的动画,而且会导致这个工作和技术人员绑定。代替方案也简单,就是Animator。
Animator其实创建动画的操作也不复杂,Ctrl+6打开动画面板然后直接创建就好了,生成的文件可以以后再改名。点击录制然后随便K了就行了,默认的曲线设置大部分情况就够用。
而且生成的动画只要保证每条属性的命名不变,可以在其他地方直接复用,像普通的缩放位移就可以做成通用的,倒时候把脚本复制一下就行。
Animator包含一个动画状态机,本身可以实现非常复杂的功能。不过大多数情况也用不上。我这为了减少工作量,就约定了两个动画名"ShowAnim""HideAnim",然后在游戏的主要UI容器类上提供了SetActive(bl)方法,创建或者显示的时候播放容器下所有Animator的ShowAnim动画,关闭和隐藏的时候要求调用SetActive(false),这时候就会先播放所有Animator的HideAnim然后在播放完后隐藏界面,第一次SetActive(true)则是自动的,对技术人员而言也算隐藏的比较好。
由于界面可能分层,那Animator就可能在各层都存在一个实例。获取容器下所有Animator就能同时启动所有动画(一般主动播放的都是隐藏动画),大部分情况也可以兼容,就不用一个一个处理不同情况的动画分支了。子界面之间的切换和父级界面之间的切换都可以用同一个动画,处于不同状态的界面也都可以正常退出。
大部分情况,HideAnim就是Sho