有没有办法从实体中获取转换组件?我知道,它有新的图书馆,找不到。我只能找到翻译。也许这与另一种获取实体的方式有关?也许有查询。
谁能帮忙。谢谢。
ComponentDataFromEntity<Translation> allTranslations = GetComponentDataFromEntity<Translation>(true);
....
public class TargetToDirectionSystem : SystemBase
{
protected override void OnUpdate()
{
Entities.
WithNone<PlayerTag>().
WithAll<ChaserTag>().
ForEach((ref MoveData moveData, ref Rotation rot, in Translation pos, in TargetData targetData) =>
{
ComponentDataFromEntity<Translation> allTranslations = GetComponentDataFromEntity<Translation>(true);
if (!allTranslations.Exists(targetData.targetEntity))
{
return;
}
Translation targetPos = allTranslations[targetData.targetEntity];
float3 dirToTarget = targetPos.Value - pos.Value;
moveData.direction = dirToTarget;
}).Run();
}
}
实际上并没有像游戏对象那样的“变换”,但我怀疑您正在寻找 LocalToWorld。除了具有位置属性外,它还具有旋转、向上、向前等功能。它包含一个矩阵,您可以使用该矩阵与位置相乘以转换为世界坐标。如果你想从世界到本地,在做乘法之前反转矩阵。
LocalToWorld
是世界的转变。 Translation
和 Rotation
都是局部空间。
using Unity.Entities;
using Unity.Jobs;
using Unity.Mathematics;
using Unity.Transforms;
float3 point = new float3( 0 , 0 , 0 );
Entities
.ForEach( ( in LocalToWorld transform ) =>
{
float dist = math.distance( point , transform.Position );
if( dist<5 )
{
/* something happens */
}
} )
.WithBurst().ScheduleParallel();