2

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

到处都有几个示例,Youtube 视频以及直接来自 Unity 的示例,例如 github repo 'EntityComponentSystemSamples'。

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

通常情况下,Unity GameObjects 会同时拥有两者,一个用于每个图形帧更新 ( OnUpdate),一个用于每个物理运动更新 ( OnFixedUpdate)。

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

DOTS 中是否删除了这个概念?如何在 DOTS 中向 PhysicsBody 添加脚本化的不同力?

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

4

2 回答 2

4

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

属性[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 */
    }
}
[UpdateInGroup( typeof(PresentationSystemGroup) )]
public class SomeKindOfRenderingSystem : SystemBase
{
    protected override void OnUpdate ()
    {
        /* rendering update */
    }
}
于 2020-06-25T14:48:59.730 回答
2

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

于 2020-12-19T21:33:16.860 回答