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