我有一个问题不一定特定于任何平台或API,但更具体到动画之间代码中的交互.
游戏就是一个很好的例子.假设玩家死了,并且在删除对象之前必须完成死亡动画.对于许多情况来说,这是典型的,在这种情况下,某些动画必须在继续执行通常会遵循的动作之前完成.你会怎么做呢?
我的问题是关于动画的控制和逻辑.您如何设计一个能够驱动动画但同时实现自定义行为的系统?
通常出现的问题是游戏逻辑和动画数据变得相互依赖.也就是说,动画必须回调代码或以某种方式包含动画序列持续时间的元数据.更常见的问题是,当一个动画必须触发一些其他代码时,比如在1.13s之后产生一个自定义精灵,这往往会导致代码和动画的深度嵌套.带有计时器的炸弹就是逻辑和动画的例子,两者都互动,但我想让它们尽可能分开.
但是你要做些什么来保持动画和代码两个不同的东西?
最近我一直在尝试mgrammar,我在想,DSL可能是最好的选择.这将允许动画或动画制作者以一种可能安全的方式表达某些事物,然后进入内容管道......
解决方案取决于你想要的游戏玩法.如果游戏玩法是100%代码驱动的,则动画由实体的状态(状态驱动的动画)驱动.如果它是图形/动画驱动的,动画长度决定了实体处于该状态的多长时间(动画驱动状态).
后者在商业生产环境中通常更灵活,因为设计师可以说"我们需要更短的死亡目标"并且它会得到协商.但是当你有非常精确的规则或像物理学这样的模拟系统时,状态驱动的动画可能更好.对于一般情况,没有100%正交和清洁的解决方案.
有一点可以防止它变得太乱,就是考虑游戏AI模式:
游戏AI通常被实现为某种形式的有限状态机,可能是多个状态机或以某种方式分层(最常见的划分是具有低级别动作/转换的高级脚本格式).
在低级别你可以说"在hitreact状态,回放我的hitreact anim直到它完成,然后从高级逻辑中找出要继续的状态." 在高层次上,有很多方法可以用来定义逻辑,但是像"接近/攻击/撤退"这样的简单重复循环是一个很好的开始.
这有助于保持两种行为 - 计划活动和对新事件的反应 - 过于混合.同样,它在实践中并不总是以这种方式解决,原因与有时您希望代码驱动数据或相反的原因相同.但那是你的AI.这里没有一般解决方案