我一直在尝试在游戏中混合使用Unity的Animators和Playables,并且在大多数情况下效果很好,但是我已经遇到了很长时间了两个问题,最好在他们周围工作。今天,我再次猛击他们,在网上找不到解决方案之后,我决定让懒惰的驴子最终寻求帮助。
基本设置是我的角色具有:
具有其控制器,状态机等的动画器,主要用于运动,跳跃,攀爬等。如果这是相关的,则每个角色都具有通用角色的覆盖控制器。
一个非常简单的可播放图形,仅带有一个输出(包装动画器)和一个输入(包装我当时要播放的特定剪辑)。这用于行动和攻击。
我遇到的问题是:
1-我似乎无法找出一种优雅,简洁的方式来知道馈入图形的剪辑何时完成(上述第二部分)。目前,我通过简单地计算剪辑的长度并除以当前的动画速度因子来避免这种情况。我还必须考虑动画何时暂停(例如,停顿)。这样就可以完成工作,但是很简单,我敢肯定必须有更好的方法。
2-最重要的是,当我完成图形和独立动画时,剪辑所触摸的所有属性的值都将锁定为最后一个值。即使在常规动画师播放的任何动画中,它们也保持锁定状态;即使这些更高版本的动画中的任何一个更改了它的值,当它们结束时,它也会快照回到锁定的“最后一帧”值。
我已经尝试了几种方法来解决此问题:
2.1-在空闲/默认动画中设置属性的默认值/期望值(以将其标记为正常动画师动画中的可动画属性)。这仅解决了涉及动画的问题。此后播放的任何其他动画都会立即恢复为该图形播放的动画的最后一帧锁定的值。
2.2-销毁包裹动画的可播放对象(我还是这样做以进行清理,因为每次播放新动画时都需要重新创建它)。
2.3-销毁该图并每次重新创建它(令人惊讶的是,即使这将值锁定)。
2.4-禁用动画器,然后再次启用它。
坦率地说,我开始对第二个问题失去理智,因此,我们将不胜感激任何帮助。预先感谢您的帮助!
答案 0 :(得分:0)
尽管这个问题已经很老了,但我还是添加了答案(以及相关的后续问题),以防万一有更多的人从搜索引擎中消失。
在旧版和非旧版之间指定要调用的对象/脚本和函数的方式有所不同-但在两种情况下,这基本上都是回调,因此您可以确定何时开始/结束动画(或动画中的任何点)之间)。
void Update()
内执行那些操作,而是尝试从void LateUpdate()
更改那些被“动画锁定”的属性的值。根据我的测试-使用/执行“旧版”动画(这也意味着“动画”组件而不是“动画控制器”)允许您至少在动画完成后使用Update()
。
同样要记住,“动画控制器”(组件)不接受任何状态的“旧版”动画的导入。
动画(组件)似乎不播放(至少不是自动播放)非旧版动画。
就我的问题而言,它与OP的问题基本相同-是否可以在使用“较新的”动画控制器时以某种方式“解锁”这些属性(显然没有播放任何状态/动画)?
尽管-基于我在尝试查找正在发生的事情时所阅读的内容。这些“旧版”动画并不是真正的“旧版”,而且似乎会因为诸如更好的性能之类而停留。