用图状结构去理解Animator

用图状结构去理解Animator

本人是一个Unity菜鸟,刚自学Unity刚刚有个把月吧,所以对很多东西都不懂,这篇博客是我的第一篇博客,所以还有好多好多需要我去学习和进步的东西。我希望借助数据结构里的图状结构去理解一下Unity里Animator的一些逻辑关系,说实话我对图的接触时间也不长,我想通过结合一下两者互相理解彼此吧。还请大家对我理解上的偏差做出批评,让我能够有所提升吧!

Animator Controller

Animator Controller
   这是控制僵尸这个GameObject的Animator Controller,里面有很多的状态切换,这个结构看起来很像一个有向图,像离散数学里二元关系的关系图。状态切换的参数可以看成是有向图的权值,因此这又可以看作是一个网,有向图的权值一般是表示从一个顶点到另一个顶点的距离或耗费,或者是一个二进制编码出现的频率或概率。而状态切换的这个参数往往是布尔型或者是触发器,因此以我的理解是两个状态进行转换的条件(conditions),不过这个参数也可以选择为Int型和Float型,当选择Int或Float的时候是不是就可以完全看成是两个状态之间的距离或者频率了呢?本人没怎么用过Int和Float型的参数,所以不知道,希望大家指点迷津。
  下面我想举一个具体的例子来理解一下到底如何进行状态的切换。
僵尸水平移动
  我们可以明显地看到当僵尸在水平方向上移动时,手会伸一下,这看起来怪怪的。
  但是如果去找一下这个Animation,发现并不会伸手,这是为什么呢?
Animation

  我想大家都能看出来,是因为动画过渡的问题。现在再来看一下僵尸的Animator Controller:
在这里插入图片描述
在这里插入图片描述

  注意两个蓝色的Translation,我们可以看得到,是没有直接从Idle到Right的Translation的,而从静止不动到向右移动只能经过Walk这个Animation,而Walk是有抬手动作的,所以出现了上述的情况,至于怎样解决,这涉及到退出时间、过度时间等等问题,我还没太搞懂所以这里我也就跳过吧……我主要想说的是这和图的深度优先遍历很像,都是从顶点开始,然后从其未被选中的邻接点中选择下一个顶点继续进行深度优先遍历,被遍历到的顶点会入栈,如果所有和其相通的顶点都被访问到了才可以退栈。在我看来这两者放在一起理解是行得通的。
  这只是我的一些个人的理解吧,我是个刚学习Unity的小萌新,对一些Unity到底是怎么样运行的问题以及很多复杂的功能还需要花很多的时间去学习,可能随着我学得更深入会发现我的这篇博客就是个笑话……不过我还是希望能和大家伙儿一起学习交流,能向圈内的人才们汲取一点知识。

猜你喜欢

转载自blog.csdn.net/font_weight/article/details/110355225