有没有办法从实体中获取变换分量?我知道,有一个新的图书馆,找不到。我只能找到翻译。也许这与另一种获得实体的方式有关?也许是查询。有人能帮忙吗。谢谢。
4si2a6ki1#
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(); } }
cs7cruho2#
这里没有一个像游戏对象那样的“变换”,但我怀疑你在寻找LocalToWorld。沿着有一个位置属性,它还有旋转,向上,向前等。它包含一个矩阵,你可以用它乘以一个位置,然后转换成世界坐标。如果你想从世界到局部,在做乘法之前先求矩阵的逆。
q5lcpyga3#
LocalToWorld是世界变换。Translation和Rotation都是局部空间。
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();
3条答案
按热度按时间4si2a6ki1#
....
cs7cruho2#
这里没有一个像游戏对象那样的“变换”,但我怀疑你在寻找LocalToWorld。沿着有一个位置属性,它还有旋转,向上,向前等。它包含一个矩阵,你可以用它乘以一个位置,然后转换成世界坐标。如果你想从世界到局部,在做乘法之前先求矩阵的逆。
q5lcpyga3#
LocalToWorld
是世界变换。Translation
和Rotation
都是局部空间。