Я хочу начать изучать Unity DOTS простым движением 2D. Я взял новейшее видео, чтобы погрузиться в него
https://www.youtube.com/watch?v=BNMrevfB6Q0
и узнать, как настроить пользовательский компонент в системе. Но для перемещения мне сейчас нужен компонент Rigidbody2D
, поэтому я прикрепил его к своему игровому объекту.
![enter image description here](https://i.stack.imgur.com/xxN5O.png)
Мой сценарий преобразования преобразует этот GO в объект
public class MovementBehaviour : MonoBehaviour, IConvertGameObjectToEntity
{
[SerializeField]
private float movementSpeed;
public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
{
dstManager.AddComponentData(entity, new MovementInputComponent());
dstManager.AddComponentData(entity, new MovementSpeedComponent { Value = movementSpeed });
// rigidbody gets converted automatically ... ?
}
}
И система должна обрабатывать простое физическое движение
public class MovementSystem : JobComponentSystem
{
[BurstCompile]
struct MovementJob : IJobForEach<MovementInputComponent, MovementSpeedComponent, Rigidbody2D>
{
public float fixedDeltaTime;
public void Execute(ref MovementInputComponent movementInput, ref MovementSpeedComponent movementSpeed, ref Rigidbody2D rigidbody)
{
// rb.MovePosition(rb.position + movementInput + movementSpeed * fixedDeltaTime);
}
}
protected override JobHandle OnUpdate(JobHandle inputDeps)
{
MovementJob job = new MovementJob { fixedDeltaTime = Time.fixedDeltaTime };
return job.Schedule(this, inputDeps);
}
}
К сожалению, MovementJob
выдает ошибку
Тип 'Rigidbody2D' долженбыть необнуляемым типом значения, чтобы использовать его в качестве параметра 'T2' в универсальном типе или методе 'IJobForEach'
, поэтому кто-то знает, как обращаться с компонентом Rigidbody?