unity3d Unity ECS获取实体转换

sd2nnvve  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(183)

有没有办法从实体中获取变换分量?我知道,有一个新的图书馆,找不到。我只能找到翻译。也许这与另一种获得实体的方式有关?也许是查询。
有人能帮忙吗。谢谢。

4si2a6ki

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();
    }
}
cs7cruho

cs7cruho2#

这里没有一个像游戏对象那样的“变换”,但我怀疑你在寻找LocalToWorld。沿着有一个位置属性,它还有旋转,向上,向前等。它包含一个矩阵,你可以用它乘以一个位置,然后转换成世界坐标。如果你想从世界到局部,在做乘法之前先求矩阵的逆。

q5lcpyga

q5lcpyga3#

LocalToWorld是世界变换。TranslationRotation都是局部空间。

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();

相关问题