Unity ECS 获取实体转换

问题描述 投票:0回答:3

有没有办法从实体中获取转换组件?我知道,它有新的图书馆,找不到。我只能找到翻译。也许这与另一种获取实体的方式有关?也许有查询。

谁能帮忙。谢谢。

enter image description here

unity3d unity-dots
3个回答
0
投票
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();
    }
}

0
投票

实际上并没有像游戏对象那样的“变换”,但我怀疑您正在寻找 LocalToWorld。除了具有位置属性外,它还具有旋转、向上、向前等功能。它包含一个矩阵,您可以使用该矩阵与位置相乘以转换为世界坐标。如果你想从世界到本地,在做乘法之前反转矩阵。


0
投票

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();
© www.soinside.com 2019 - 2024. All rights reserved.