C# 处理点中的非自定义组件

C# 处理点中的非自定义组件,c#,unity3d,C#,Unity3d,我想从一个简单的2D动作开始学习统一点。我拍摄了最新的视频来深入了解它 并知道如何使用系统设置自定义组件。但是对于移动,我现在需要Rigidbody2D组件,所以我将它附加到我的游戏对象上 我的转换脚本将转换为实体 public class MovementBehaviour : MonoBehaviour, IConvertGameObjectToEntity { [SerializeField] private float movementSpeed; publ

我想从一个简单的2D动作开始学习统一点。我拍摄了最新的视频来深入了解它

并知道如何使用系统设置自定义组件。但是对于移动,我现在需要
Rigidbody2D
组件,所以我将它附加到我的游戏对象上

我的转换脚本将转换为实体

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);
    }
}
公共类移动系统:JobComponentSystem
{
[BurstCompile]
结构移动作业:IJobForEach
{
公共浮动固定时间;
public void Execute(参考移动输入组件移动输入,参考移动速度组件移动速度,参考刚体2d刚体)
{
//rb.移动位置(rb.位置+移动输入+移动速度*固定时间);
}
}
受保护的重写JobHandle OnUpdate(JobHandle inputDeps)
{
MovementJob job=新的MovementJob{fixedDeltaTime=Time.fixedDeltaTime};
返回作业计划(此,inputDeps);
}
}
不幸的是,
MovementJob
抛出了一个错误

类型“Rigidbody2D”必须是不可为null的值类型,才能 将其用作泛型类型或方法中的参数“T2” “IJobForEach”


那么,有人知道如何处理刚体组件吗?

AFAIK Unity尚未完全支持jobs中的所有物理组件(上次我检查时,它仍在进行中),因此您可能需要自己制作一些东西(在最新的Unity版本中,您可以访问物理系统的某些部分,如光线投射和navmesh查询,这可能就足够了,具体取决于您要实现的目标)谢谢。看来我得写我自己的物理逻辑了。至少在Unity完成整个物理系统的工作之前。Unity论坛上有一些帖子,里面有一些可能有用的示例: