Lan*_*ard 9 javascript animation asynchronous state-machine unity-game-engine
我想知道当您执行删除项目等操作时,动画等异步操作是如何工作的,因此想出了这种思维过程,并想从行业最佳实践角度看反馈是否有意义.
有两层:
反应层立即发生,可以通过传统的事件调度完成.
这是您创建和删除数据的地方,所有这些都是即时发生的.
状态机会收到这些即时响应变化的通知.
然后状态机"转换".假设存在一些异步事件(动画,网络请求等),此过程会在一段时间内发生.这就是人们说"行动排队"时的意思.
然后渲染层将动作从动作队列中移出并渲染它.这样,对潜在的即时反应层有一种延迟的反应.
我的问题是,反应层是否也需要处理异步.例如,删除一些东西.
假设项目已删除,并且您想要将其设置为动画.有几种方法可以做到这一点:
如果(1)是要走的路,那么就没有反应层,并且所有内容都是在考虑一种行动队列的情况下实现的.这使得制作可重用代码变得更加困难,因为所有内容都与动作队列的想法联系在一起.
如果(2)是要走的路,则有两个数据副本,全局副本和本地副本,它们是异步同步的.这样可以更容易地获得可重用的代码,但使其更加复杂.
想知道这是否有意义,并且如果这些方法中的任何一种在行业中是更好的实践(或者如果有替代方案我没有解决这个问题更有意义).
换句话说,有两种主要方法:
想知道游戏和应用程序等如何处理这类事情.
更新
在以不同的方式思考之后,也许更像是海洋中海带的摇晃:
https://www.youtube.com/watch?v=gIeLCzR8EgA
我的意思是,有一个基础层是立即的(创建/删除),然后有一些中间层包含发生的所有事务(创建/删除)的副本,渲染层用于动画创建/删除.因此原始数据始终保持同步,但渲染层使用一种旧版本的数据,并发生所有更改的链.
反应层 - >事务层 - >渲染层.
另一种选择是标记为删除,然后只有在动画完成后才实际执行删除,但这看起来很糟糕.
更新
另一个版本:
根据我作为 Unity 游戏开发人员的经验,正确的决定是在中间,至于游戏引擎中的物理特性是近似的,因为半完美事物的感觉非常像完美事物。
解释是因为你的目标越现实、越现实,你需要的资源就越多,不仅是 CPU 和 GPU,还包括现金。
在这个奇怪的序言之后,我引用了标志选项,所应用的方法与普通的垃圾收集器没有太大不同,您标记了一个不再有用的项目,当垃圾收集器来时,他释放了该对象使用的内存空间,所以这个新的空间可以重复利用。
同样的过程是由很多引擎完成的,销毁操作是在渲染计算之前进行的。
最终目标始终是达成一个良好的中间解决方案。
有可能在引擎计算过程的每个时刻强制立即销毁,但这种解决方案总是被弃用。
对于动画,您通常使用的方式是在动画结束时或最后几帧中销毁(设置要销毁的标志)。至少你可以使用一些技巧让淡入淡出变得更愉快(比如粒子)。
真正的问题是,当您必须通过网络销毁对象(多人游戏)时,在这种情况下,您必须建立更容易参与的机器并选择它来计算物理和交互,该机器始终是服务器或至少主机(取决于游戏类型)。
我知道这个问题被标记为javascript问题,但我忍不住回答。
我还附上了 Unity 文档中有关 Destruct 函数的页面,解释了它们如何从游戏环境中删除项目:
https://docs.unity3d.com/ScriptReference/Object.Destroy.html
祝你今天过得愉快!和良好的编码。
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |