public void Execute() { var collector = new IgnoreTransparentClosestHitCollector(World); World.CastRay(RaycastInput, ref collector); Hit[0] = collector.ClosestHit; }
protected override void OnUpdate() { CollisionWorld collisionWorld = m_BuildPhysicsWorld.PhysicsWorld.CollisionWorld; EntityCommandBuffer commandBuffer = m_EntityCommandBufferSystem.CreateCommandBuffer(); Dependency = JobHandle.CombineDependencies(Dependency, m_EndFramePhysicsSystem.FinalJobHandle); Entities .WithName("RaycastWithCustomCollector") .WithBurst() .ForEach((Entity entity, ref Translation position, ref Rotation rotation, ref VisualizedRaycast visualizedRaycast) => { var raycastLength = visualizedRaycast.RayLength; // Perform the Raycast var raycastInput = new RaycastInput { Start = position.Value, End = position.Value + (math.forward(rotation.Value) * visualizedRaycast.RayLength), Filter = CollisionFilter.Default }; var collector = new IgnoreTransparentClosestHitCollector(collisionWorld); collisionWorld.CastRay(raycastInput, ref collector); var hit = collector.ClosestHit; var hitDistance = raycastLength * hit.Fraction; // position the entities and scale based on the ray length and hit distance // visualization elements are scaled along the z-axis aka math.forward var newFullRayPosition = new float3(0, 0, raycastLength * 0.5f); var newFullRayScale = new float3(1f, 1f, raycastLength); var newHitPosition = new float3(0, 0, hitDistance); var newHitRayPosition = new float3(0, 0, hitDistance * 0.5f); var newHitRayScale = new float3(1f, 1f, raycastLength * hit.Fraction); commandBuffer.SetComponent(visualizedRaycast.HitPositionEntity, new Translation { Value = newHitPosition }); commandBuffer.SetComponent(visualizedRaycast.HitRayEntity, new Translation { Value = newHitRayPosition }); commandBuffer.SetComponent(visualizedRaycast.HitRayEntity, new NonUniformScale { Value = newHitRayScale }); commandBuffer.SetComponent(visualizedRaycast.FullRayEntity, new Translation { Value = newFullRayPosition }); commandBuffer.SetComponent(visualizedRaycast.FullRayEntity, new NonUniformScale { Value = newFullRayScale }); }).Schedule(); m_EntityCommandBufferSystem.AddJobHandleForProducer(Dependency); }
protected override void OnUpdate( ) { int i_pathPlannerCount = group_pathPlanners.CalculateEntityCount(); if (i_pathPlannerCount == 0) { return; } CollisionWorld collisionWorld = buildPhysicsWorld.PhysicsWorld.CollisionWorld; float3 f_pointerPosition = Input.mousePosition; UnityEngine.Ray pointerRay = Camera.main.ScreenPointToRay(f_pointerPosition); Debug.DrawLine(pointerRay.origin, pointerRay.origin + pointerRay.direction * 200, Color.blue); CollisionFilter collisionFilter = default; collisionFilter.CollidesWith = 1 << (int)CollisionFilters.ElevationNodes; // Elevation Nodes. // collisionFilter.CollidesWith += 1 << (int) CollisionFilters.Floor ; // Floor. // collisionFilter.CollidesWith += 1 << (int) CollisionFilters.Walls ; // Walls. // collisionFilter.CollidesWith += 1 << (int) CollisionFilters.Ramps ; // Ramps. // collisionFilter.CollidesWith += 1 << (int) CollisionFilters.Other ; // Other. // Optional var raycastInput = new RaycastInput { Start = pointerRay.origin, End = pointerRay.origin + pointerRay.direction * 200, Filter = CollisionFilter.Default }; // raycastInput.Filter.CollidesWith = 2 ; // Scores layer. raycastInput.Filter.CollidesWith = collisionFilter.CollidesWith; // Barriers layer. var collector = new IgnoreTransparentClosestHitCollector(collisionWorld); if (collisionWorld.CastRay(raycastInput, ref collector)) { if (Input.GetMouseButtonUp(0) || Input.GetMouseButtonUp(1)) { Debug.Log("Hits: " + collector.ClosestHit.Entity + " @ pos: " + collector.ClosestHit.Position); ComponentDataFromEntity <PathPlannerComponent> a_pathPlanners = GetComponentDataFromEntity <PathPlannerComponent> (false); NativeArray <Entity> na_pathPlanners = group_pathPlanners.ToEntityArray(Allocator.TempJob); Entity pathPlannersEntity; PathPlannerComponent pathPlanner;; // Test. for (int i = 0; i < na_pathPlanners.Length; i++) { pathPlannersEntity = na_pathPlanners [i]; pathPlanner = a_pathPlanners [pathPlannersEntity]; if (Input.GetMouseButtonUp(0)) { // A pathPlanner.entityA = collector.ClosestHit.Entity; } else if (Input.GetMouseButtonUp(1)) { // B pathPlanner.entityB = collector.ClosestHit.Entity; } a_pathPlanners [pathPlannersEntity] = pathPlanner; // Set back } // for pathPlannersEntity = na_pathPlanners [0]; pathPlanner = a_pathPlanners [pathPlannersEntity]; na_pathPlanners.Dispose(); if (pathPlanner.entityA.Version > 0 && pathPlanner.entityB.Version > 0) { EntityCommandBuffer.ParallelWriter ecbp = becb.CreateCommandBuffer().AsParallelWriter(); Debug.Log("Start entity: " + pathPlanner.entityA + " target entity: " + pathPlanner.entityB); Entities .WithName("OrderPathSearchJob") .WithAll <IsAliveTag, PathPlannerComponent> () .ForEach((Entity entity, int entityInQueryIndex) => { ecbp.AddComponent <CanFindPathTag> (entityInQueryIndex, entity); }).Schedule(); becb.AddJobHandleForProducer(Dependency); } } } }
protected override void OnUpdate( ) { CollisionWorld collisionWorld = buildPhysicsWorld.PhysicsWorld.CollisionWorld; // Dependency = JobHandle.CombineDependencies ( Dependency, endFramePhysicsSystem.GetOutputDependency ()) ; var na_rays = this.na_rays; int i_raysCount = this.i_raysCount; Entities .WithName("LIDARJob") .WithAll <NNBrainTag, LIDARTag, IsAliveTag> () .WithNone <NNIsFinishedTag> () .WithReadOnly(collisionWorld) // .WithReadOnly ( collector ) .WithReadOnly(na_rays) .ForEach((ref DynamicBuffer <NNInputNeuronsValuesBuffer> a_inputLayerValues, in Translation position, in Rotation q, in VehicleVelocityComponent velocity) => { float3 f3_startPoint = position.Value; for (int i = 0; i < i_raysCount; i++) { quaternion q_rayDirection = na_rays [i]; float3 f3_endPoint = f3_startPoint + math.mul(math.mul(q.Value, q_rayDirection), Vector3.forward) * 3; var raycastInput = new RaycastInput { Start = f3_startPoint, End = f3_endPoint, Filter = CollisionFilter.Default }; // raycastInput.Filter.CollidesWith = 2 ; // Scores layer. raycastInput.Filter.CollidesWith = 1; // Barriers layer. float f_input = -1; var collector = new IgnoreTransparentClosestHitCollector(collisionWorld); if (collisionWorld.CastRay(raycastInput, ref collector)) { Unity.Physics.RaycastHit hit = collector.ClosestHit; // Debug.DrawLine ( f3_startPoint, f3_endPoint, Color.red ) ; // Debug.DrawLine ( f3_startPoint, hit.Position, Color.green ) ; // Length of ray, until hit collider. f_input = math.lengthsq(hit.Position - f3_startPoint); } // else // { // Debug.DrawLine ( f3_startPoint, f3_endPoint, Color.blue ) ; // } a_inputLayerValues [i] = new NNInputNeuronsValuesBuffer() { f = f_input }; } a_inputLayerValues [a_inputLayerValues.Length - 1] = new NNInputNeuronsValuesBuffer() { f = math.length(velocity.f_forwardSpeed) }; a_inputLayerValues [a_inputLayerValues.Length - 2] = new NNInputNeuronsValuesBuffer() { f = math.length(velocity.f_sideWaySkiddSpeed) }; }).ScheduleParallel();
protected override void OnUpdate() { CollisionWorld collisionWorld = buildPhysicsWorld.PhysicsWorld.CollisionWorld; // EntityCommandBuffer commandBuffer = m_EntityCommandBufferSystem.CreateCommandBuffer(); Dependency = JobHandle.CombineDependencies(Dependency, endFramePhysicsSystem.GetOutputDependency()); // UnityEngine.Debug.Log ( "Ray 2" ) ; Vector3 f3_point = Camera.main.ScreenToWorldPoint(Input.mousePosition); float3 f3_endPoint = f3_point - Vector3.up * 200; Debug.DrawLine(f3_point, f3_endPoint, Color.yellow); // Perform the Raycast var raycastInput = new RaycastInput { Start = f3_point, End = f3_endPoint, Filter = CollisionFilter.Default }; // Debug.Log ( raycastInput.Filter.BelongsTo + "; " + raycastInput.Filter.CollidesWith + "; " + raycastInput.Filter.GroupIndex ) ; // raycastInput.Filter.CollidesWith = 0 ; raycastInput.Filter.CollidesWith = 2; var collector = new IgnoreTransparentClosestHitCollector(collisionWorld); collisionWorld.CastRay(raycastInput, ref collector); var hit = collector.ClosestHit; var hitDistance = 200 * hit.Fraction; Debug.DrawLine(f3_point, f3_point - Vector3.up * hitDistance, Color.green); if (hitDistance != 0) { Debug.Log("Try hit at: " + hitDistance); } /* * Entities * .WithName("RaycastWithCustomCollector") * .WithBurst() * .ForEach((Entity entity, ref Translation position, ref Rotation rotation, ref VisualizedRaycast visualizedRaycast) => * { * var raycastLength = visualizedRaycast.RayLength; * * // Perform the Raycast * var raycastInput = new RaycastInput * { * Start = position.Value, * End = position.Value + (math.forward(rotation.Value) * visualizedRaycast.RayLength), * Filter = CollisionFilter.Default * }; * * var collector = new IgnoreTransparentClosestHitCollector(collisionWorld); * * collisionWorld.CastRay(raycastInput, ref collector); * * var hit = collector.ClosestHit; * var hitDistance = raycastLength * hit.Fraction; * * // position the entities and scale based on the ray length and hit distance * // visualization elements are scaled along the z-axis aka math.forward * var newFullRayPosition = new float3(0, 0, raycastLength * 0.5f); * var newFullRayScale = new float3(1f, 1f, raycastLength); * var newHitPosition = new float3(0, 0, hitDistance); * var newHitRayPosition = new float3(0, 0, hitDistance * 0.5f); * var newHitRayScale = new float3(1f, 1f, raycastLength * hit.Fraction); * * commandBuffer.SetComponent(visualizedRaycast.HitPositionEntity, new Translation { Value = newHitPosition }); * commandBuffer.SetComponent(visualizedRaycast.HitRayEntity, new Translation { Value = newHitRayPosition }); * commandBuffer.SetComponent(visualizedRaycast.HitRayEntity, new NonUniformScale { Value = newHitRayScale }); * commandBuffer.SetComponent(visualizedRaycast.FullRayEntity, new Translation { Value = newFullRayPosition }); * commandBuffer.SetComponent(visualizedRaycast.FullRayEntity, new NonUniformScale { Value = newFullRayScale }); * }).Schedule(); * * m_EntityCommandBufferSystem.AddJobHandleForProducer(Dependency); */ }