I get this exception when I perform a raycast:
Exception
InvalidOperationException: The Unity.Collections.NativeArray1[Unity.Physics.BoundingVolumeHierarchy+Node] has been deallocated, it is not allowed to access it Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle.CheckReadAndThrowNoEarlyOut (Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle handle) (at <c85ab98a3257443eaa6aaaea77733582>:0) Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle.CheckReadAndThrow (Unity.Collections.LowLevel.Unsafe.AtomicSafetyHandle handle) (at <c85ab98a3257443eaa6aaaea77733582>:0) Unity.Collections.LowLevel.Unsafe.NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr[T] (Unity.Collections.NativeArray
1[T] nativeArray) (at :0)
Unity.Physics.BoundingVolumeHierarchy…ctor (Unity.Collections.NativeArray1[T] nodes, Unity.Collections.NativeArray
1[T] nodeFilters) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Collision/Geometry/BoundingVolumeHierarchy.cs:26)
Unity.Physics.Broadphase+Tree.get_BoundingVolumeHierarchy () (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Collision/World/Broadphase.cs:363)
Unity.Physics.Broadphase.CastRay[T] (Unity.Physics.RaycastInput input, Unity.Collections.NativeArray`1[T] rigidBodies, T& collector) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Collision/World/Broadphase.cs:513)
Unity.Physics.CollisionWorld.CastRay[T] (Unity.Physics.RaycastInput input, T& collector) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Collision/World/CollisionWorld.cs:199)
Unity.Physics.PhysicsWorld.CastRay[T] (Unity.Physics.RaycastInput input, T& collector) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Dynamics/World/PhysicsWorld.cs:74)
Unity.Physics.QueryWrappers.RayCast[T] (T& target, Unity.Physics.RaycastInput input) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Collision/Queries/Collidable.cs:99)
Unity.Physics.PhysicsWorld.CastRay (Unity.Physics.RaycastInput input) (at Library/PackageCache/com.unity.physics@0.4.0-preview.5/Unity.Physics/Dynamics/World/PhysicsWorld.cs:69)
Systems.EnemySystem+MovementRayCast.CheckRay (Unity.Mathematics.float3 pos, Unity.Mathematics.float3 dir, Unity.Mathematics.float3 currentDirection) (at Assets/Scripts/Systems/EnemySystem.cs:101)
Systems.EnemySystem+<>c__DisplayClass_OnUpdate_LambdaJob0.OriginalLambdaBody (Movable& movable, Components.Enemy& enemy, Unity.Transforms.Translation& translation) (at Assets/Scripts/Systems/EnemySystem.cs:43)
Systems.EnemySystem+<>c__DisplayClass_OnUpdate_LambdaJob0.IterateEntities (Unity.Entities.ArchetypeChunk& chunk, Systems.EnemySystem+<>c__DisplayClass_OnUpdate_LambdaJob0+LambdaParameterValueProviders+Runtimes& runtimes) (at :0)
Systems.EnemySystem+<>c__DisplayClass_OnUpdate_LambdaJob0.Execute (Unity.Entities.ArchetypeChunk chunk, System.Int32 chunkIndex, System.Int32 firstEntityIndex) (at :0)
Unity.Entities.JobChunkExtensions.RunWithoutJobs[T] (T& jobData, Unity.Entities.ArchetypeChunkIterator& chunkIterator) (at Library/PackageCache/com.unity.entities@0.11.1-preview.4/Unity.Entities/IJobChunk.cs:157)
Systems.EnemySystem+<>c__DisplayClass_OnUpdate_LambdaJob0.RunWithoutJobSystem (Unity.Entities.ArchetypeChunkIterator* archetypeChunkIterator, System.Void* jobData) (at :0)
Unity.Entities.InternalCompilerInterface.RunJobChunk[T] (T& jobData, Unity.Entities.EntityQuery query, Unity.Entities.InternalCompilerInterface+JobChunkRunWithoutJobSystemDelegate functionPointer) (at Library/PackageCache/com.unity.entities@0.11.1-preview.4/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs:375)
Systems.EnemySystem.OnUpdate () (at Assets/Scripts/Systems/EnemySystem.cs:36)
Unity.Entities.SystemBase.Update () (at Library/Pa
Do I need to add some dependency to my job?
I have made a simplified version:
public class EnemySystem : SystemBase
{
private PhysicsWorld _PhysicsWorld;
private Random random = new Random(22);
protected override void OnCreate()
{
base.OnCreate();
_PhysicsWorld = World.DefaultGameObjectInjectionWorld.GetExistingSystem<BuildPhysicsWorld>().PhysicsWorld;
}
protected override void OnUpdate()
{
var rayCaster = new MovementRayCast
{
PhysicsWorld = _PhysicsWorld
};
random.NextInt();
var rand = random;
var frame = UnityEngine.Time.frameCount;
Entities.ForEach((ref Movable movable, ref Enemy enemy, in Translation translation) =>
{
var ray = new RaycastInput
{
Start = translation.Value,
End = translation.Value + movable.direction * 0.9f,
Filter = CollisionFilter.Default
/*new CollisionFilter
{
GroupIndex = 0,
BelongsTo = 1u << 1,
CollidesWith = 1u << 2
}*/
};
Debug.Log($"WallAhead {rayCaster.PhysicsWorld.CastRay(ray)}");
}).WithoutBurst().Run();
}
private struct MovementRayCast
{
[ReadOnly] public PhysicsWorld PhysicsWorld;
}
}