Jump to content
Unity Insider Forum

ECS Collider da oder nicht da?


Kojote
 Share

Recommended Posts

Hi!

Ich hoffe ihr könnt mir bei meinem kleinen Collider-Problem weiterhelfen. Ich habe zwei GameObjects die eine PhysicsShape Komponente haben.

Im Authoring wandle ich die GameObjects in Entities um und speichere sie in einer IComponentData.

Danach erzeuge ich einige Entities die auch anwesend sind und von anderer Stelle ihr Material und ihren Mesh bekommen.

Danach möchte ich bei diesen Entities noch die Collider anfügen, was ich damit mache:

    [UpdateAfter(typeof(TileViewSystem))]
    public partial class TileCollisionSystem : SystemBase {

        private EndSimulationEntityCommandBufferSystem _commandBufferSystem;

        private PhysicsCollider _floorColliderPrefab;
        private PhysicsCollider _solidColliderPrefab;


        [BurstCompile]
        public void StarTileCollisionSystem() {
            Entity mapLoaderEntity = SystemAPI.GetSingletonEntity<MapLoaderTag>();
            GameMapAspect gameMapAspect = SystemAPI.GetAspect<GameMapAspect>(mapLoaderEntity);

            _floorColliderPrefab = EntityManager.GetComponentData<PhysicsCollider>(gameMapAspect.floorColliderPrefab);
            _solidColliderPrefab = EntityManager.GetComponentData<PhysicsCollider>(gameMapAspect.solidColliderPrefab);
        }

        [BurstCompile]
        protected override void OnCreate() {
            _commandBufferSystem = World.GetOrCreateSystemManaged<EndSimulationEntityCommandBufferSystem>();
        }

        [BurstCompile]
        protected override void OnUpdate() {
            Entity mapLoaderEntity = SystemAPI.GetSingletonEntity<MapLoaderTag>();
            GameMapAspect gameMapAspect = SystemAPI.GetAspect<GameMapAspect>(mapLoaderEntity);

            EntityCommandBuffer.ParallelWriter commandBuffer = _commandBufferSystem.CreateCommandBuffer().AsParallelWriter();
            PhysicsCollider floorPrefab = _floorColliderPrefab;
            PhysicsCollider solidPrefab = _solidColliderPrefab;

            // Alle MapTiles durchlaufen, die eine Aktualisierung erfordern und noch keinen Collider haben
            Entities.WithAll<UpdateTileViewTag>().WithNone<PhysicsCollider>().ForEach((int entityInQueryIndex, Entity entity, in MapTileComponent mapTile) => {
                Debug.Log("Hinzufuegen der Collider!");
                PhysicsCollider data = mapTile.type.IsSolid() ? solidPrefab : floorPrefab;
                commandBuffer.AddComponent(entityInQueryIndex, entity, data);
            }).ScheduleParallel();

            // Alle MapTiles durchlaufen, damit der derzeitige Collider aktualisiert wird
            Entities.WithAll<UpdateTileViewTag>().ForEach((int entityInQueryIndex, Entity entity, in MapTileComponent mapTile, in PhysicsCollider collider) => {
                Debug.Log("Aktualisieren der Collider!");
                ColliderType colliderType = collider.Value.Value.Type;
                ColliderType expected = mapTile.type.IsSolid() ? ColliderType.Box : ColliderType.Quad;
                // Wenn der Collider nicht den Erwartungen entspricht, wird er geaendert
                if(colliderType != expected) {
                    PhysicsCollider data = mapTile.type.IsSolid() ? solidPrefab : floorPrefab;
                    commandBuffer.SetComponent(entityInQueryIndex, entity, data);
                }
            }).ScheduleParallel();

            _commandBufferSystem.AddJobHandleForProducer(this.Dependency);
        }
    }

Laut Inspector istdie Componente PhysicsCollider da und auch befüllt. Jedoch wird sie weder im Debug, noch mit RayCast erkannt. Den Debug und den RayCast kann ich als Fehler ausschließen, diese funktionieren. Es scheint so zu sein, als ob die PhysicsCollider zugewiesen werden und auch auf der Entitie vorhanden sind, jedoch nicht aktiv sind oder etwas der gleichen.

So richtig nachvollziehen kann ich es nicht. Habt ihr eine Idee woran es liegen kann?

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...