前提,我想要找到任意一个怪,让它播k_pao001,不同的怪会播不同的动作,但都是跑步动作。
首先有一个动画资源表,存储着某个模型的全部动画资源路径和动画名字。动画资源表是一个子表,有若干个。比如我有十几个模型就有十几个子表。
在初始化Animator组件的时候,先找到挂着这个Animator的对象的模型ID,根据一张模型表里面可以索引到动画资源表的名字,然后根据名字获取到子表,读取子表里的全部资源动画到Animator组件中缓存。同时缓存一份到全局资源,避免每次都读表获取。因为可能场景中存在十几个相同的对象。
每个对象下挂在Animator组件,组件的RuntimeController设为默认的没啥用。
然后对于每个对象,用OverrideController覆盖它,这个就是实际运行中需要赋值的控制器。OverrideController用到的是这个默认的资源,在游戏里只有一份,默认的RuntimeController只有简单的8个子动画片段。
播放的时候,看8个片段哪个有空闲,有的话就根据索引缓存加载AnimationClip赋给片段,然后播放。下次播放直接播就行。
如果8个都满了,那么将某一个删除。