Search Unity

Slice issue with ECS raycasting

Discussion in 'Entity Component System' started by ysxdead, Oct 20, 2019.

  1. ysxdead

    ysxdead

    Joined:
    Sep 1, 2019
    Posts:
    4
    Trying out raycasting with ECS, Entites 0.1.1, Unity 2019.3.0b7. Probably a silly mistake on my part,

    The code works when not done within a job (ComponentSystem w/ Entities.ForEach), but when in a job I get a sea of this stack trace:

    Code (CSharp):
    1. ArgumentException: Slice start + length (4) range must be <= array.Length (0)
    2. Unity.Collections.NativeSlice`1[T]..ctor (Unity.Collections.NativeArray`1[T] array, System.Int32 start, System.Int32 length) (at <5e35e4589c1948aa8af5b8e64eea8798>:0)
    3. Unity.Physics.CollisionWorld.get_Bodies () (at Library/PackageCache/com.unity.physics@0.2.4-preview/Unity.Physics/Collision/World/CollisionWorld.cs:19)
    4. Unity.Physics.PhysicsWorld.get_StaticBodies () (at Library/PackageCache/com.unity.physics@0.2.4-preview/Unity.Physics/Dynamics/World/PhysicsWorld.cs:20)
    5. Unity.Physics.Systems.BuildPhysicsWorld.OnUpdate (Unity.Jobs.JobHandle inputDeps) (at Library/PackageCache/com.unity.physics@0.2.4-preview/Unity.Physics/ECS/Systems/BuildPhysicsWorld.cs:152)
    6. Unity.Entities.JobComponentSystem.InternalUpdate () (at Library/PackageCache/com.unity.entities@0.1.1-preview/Unity.Entities/ComponentSystem.cs:933)
    7. Unity.Entities.ComponentSystemBase.Update () (at Library/PackageCache/com.unity.entities@0.1.1-preview/Unity.Entities/ComponentSystem.cs:284)
    8. Halloween.Prototyping.FixedUpdate () (at Assets/Scripts/Level/Prototyping.cs:41)
    9.  
    The source:

    Code (CSharp):
    1. public class PlayerGroundedSystem : JobComponentSystem
    2.     {
    3.         struct PlayerGroundedJob : IJobForEach<PlayerGroundedData>
    4.         {
    5.             public CollisionWorld CWorld;
    6.             public void Execute(ref PlayerGroundedData data)
    7.             {
    8.                 RaycastInput rci = new RaycastInput
    9.                 {
    10.                     Start = new float3(30, 0, 30),
    11.                     End = new float3(60, 0, 60),
    12.                     Filter = CollisionFilter.Default,
    13.                 };
    14.  
    15.                 data.Grounded = CWorld.CastRay(rci);
    16.             }
    17.         }
    18.         protected override JobHandle OnUpdate(JobHandle inputDeps)
    19.         {
    20.             BuildPhysicsWorld pWorld = World.Active.GetExistingSystem<BuildPhysicsWorld>();
    21.             CollisionWorld collisionWorld = pWorld.PhysicsWorld.CollisionWorld;
    22.             PlayerGroundedJob job = new PlayerGroundedJob
    23.             {
    24.                 CWorld = collisionWorld,
    25.             };
    26.             return job.Schedule(this, inputDeps);
    27.         }
    28.     }
    I took this from https://docs.unity3d.com/Packages/com.unity.physics@0.0/manual/collision_queries.html, for reference.
     
    artplayer likes this.
  2. ysxdead

    ysxdead

    Joined:
    Sep 1, 2019
    Posts:
    4
    Scratch that, solved ( :
    Code (CSharp):
    1.             JobHandle combined = JobHandle.CombineDependencies(inputDeps, buildPhysicsWorld.FinalJobHandle);
    2.             JobHandle handle = job.Schedule(this, combined);
     
    artplayer likes this.