Unity DOTS (ECS) 中的“FixedUpdate”在哪里?

Bli*_*ung 4 unity-game-engine physics-engine unity-dots

我开始寻找使用 DOTS(面向数据的技术堆栈)方法来制作对象的方法。

到处都有几个示例,Youtube 视频以及直接来自 Unity 的示例,例如 github 存储库“EntityComponentSystemSamples”。

在所有这些中,我偶然发现了“OnUpdate”,但从未发现“OnFixedUpdate”。

通常,Unity 游戏对象会同时拥有这两种对象,一种用于每次图形帧更新 ( OnUpdate),另一种用于每次物理运动更新 ( OnFixedUpdate)。

当尝试创建使用 Rigidbody.AddForce() 的行为时,使用 FixUpdate() 始终很重要。

这个概念在 DOTS 中被删除了吗?如何在 DOTS 中向PhysicsBody 添加脚本化的变化力?

目前,我正在将我的添加force*deltatimeUnity.Physics.PhysicsVelocity更新中。

And*_*sik 10

每个系统只能属于一个系统组。您可以使用属性来指定它。

属性[UpdateInGroup(typeof(SimulationSystemGroup))]使你OnUpdate被称为一般游戏/模拟更新。这是系统的默认组。

属性[UpdateInGroup(typeof(FixedStepSimulationSystemGroup))]使您OnUpdate以固定的模拟间隔被调用(即:FixedUpdate)。

注意:此^更正取自@thelebaron 答案。请给他投一票。

属性[UpdateInGroup(typeof(PresentationSystemGroup))]使你OnUpdate在渲染上下文中被调用;在绘制框架之前(即:更新


[UpdateInGroup( typeof(SimulationSystemGroup) )]
public class SomeKindOfSimulationSystem : SystemBase
{
    protected override void OnUpdate ()
    {
        /* simulation update */
    }
}
Run Code Online (Sandbox Code Playgroud)
[UpdateInGroup( typeof(PresentationSystemGroup) )]
public class SomeKindOfRenderingSystem : SystemBase
{
    protected override void OnUpdate ()
    {
        /* rendering update */
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 6

由于代表,我无法添加评论,但为了跟进 Andrew Lukasik 的答案,现在有一个 FixStepSimulationSystemGroup,您可以在其中更新系统(并且是物理系统在其中更新的地方)。