using Unity.Entities; using Unity.Physics; using Unity.Physics.Systems; using Unity.Transforms; namespace TinyPhysics.Systems { /// /// Find and store distance of closest entity /// Use CollisionFilter of source entity to find target /// public class ProximitySystem : SystemBase { protected override void OnUpdate() { Entities.ForEach((ref Proximity proximity, ref Translation translation, ref PhysicsCollider collider) => { ref PhysicsWorld physicsWorld = ref World.DefaultGameObjectInjectionWorld.GetExistingSystem().PhysicsWorld; if (collider.Value.IsCreated) { var pointDistanceInput = new PointDistanceInput { Position = translation.Value, MaxDistance = proximity.maxDistance, Filter = collider.Value.Value.Filter }; // Assign DistanceHit data to proximiy component physicsWorld.CalculateDistance(pointDistanceInput, out proximity.distanceHit); } }).WithoutBurst().Run(); } } }