работа с нестандартными компонентами в DOTS - PullRequest
3 голосов
/ 20 октября 2019

Я хочу начать изучать Unity DOTS простым движением 2D. Я взял новейшее видео, чтобы погрузиться в него

https://www.youtube.com/watch?v=BNMrevfB6Q0

и узнать, как настроить пользовательский компонент в системе. Но для перемещения мне сейчас нужен компонент Rigidbody2D, поэтому я прикрепил его к своему игровому объекту.

enter image description here

Мой сценарий преобразования преобразует этот 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...