Marionette 动画系统 支持帧事件吗

Marionette 动画系统 支持帧事件吗

目前不支持

目前不支持,可通过状态机组件来实现

有没有具体的实例,状态机组件onMotionStateUpdate获取哪个数值可以对应到动画的帧

更新一下。

我们正在讨论如何把动画帧事件集成到动画图里。因为现在我们认为动画帧事件调用机制欠妥。现在实现帧事件的流程如下:

  1. 用户编辑动画剪辑,添加帧事件,为事件起个名字 funcName

  2. 运行时,动画系统找到动画组件所在的结点,然后遍历结点下的其它组件,再遍历它们的每个方法,直到找到这个叫 funcName 的方法,然后调用:

for (每个组件 of 动画组件所在结点) {
  for (每个方法 of 组件) {
    if (方法名 === funcName) {
      调用此方法
      break;
    }
  }
}

可以看到,在步骤 2 里,会经历两次循环。这样的查找不仅费时,而且查找过程很隐晦。

我们正在考虑是否应该做成真正的监听-派发机制,也就是引擎不再去找方法,而是派发一个事件,由使用方来处理这个事件。也就是步骤二换成:

// 用户代码
动画组件.onFrameEvent('用户定义的事件名', () => {
    // 处理事件
});

在步骤2判断组件是否是动画组件,如果是动画组件然后才进入循环当前组件的方法,所以并不费时

不是的,是遍历动画组件所在结点下面的每个组件。肯定不是动画组件,因为你无法在动画组件上加方法啊,你加的方法都是你自己组件上的方法

派发监听的方式不是很好吗

是,在考虑,主要是之前普通动画组件上的不是派发的方式,正在研究如何统一

:+1: :+1:

顶!!!

我们今天还内部研究了下,有一部分认为现存的方式方便,监听机制需要手写anim.on(...)anim.off(...),另一部分认为监听机制更灵活,查找回调更精确。在这一点上我们还没有达成一致。是否可以分享下你的见解

marionette的animation controller的没有很方便的sokcet inspector啊,只能写代码绑定,是这样吗?

socket inspector?其实你用animation controller的话,不用像动画组件那样挂什么socket,你可以直接在骨骼结点下面挂你要的结点为子级,骨骼更新时它也会跟着更新

监听挺好的 我感觉大部分项目用监听很多我感觉挺契合的

维护业务也方便 比如定位受击反馈 在枚举类就可以找到并且直接定位到引用的代码段落