internal void RegisterSensor(GridSensorBase sensor) { if (sensor.GetProcessCollidersMethod() == ProcessCollidersMethod.ProcessAllColliders) { GridOverlapDetectedAll += sensor.ProcessDetectedObject; } else { GridOverlapDetectedClosest += sensor.ProcessDetectedObject; } }
/// <inheritdoc/> public override ISensor[] CreateSensors() { List <ISensor> m_Sensors = new List <ISensor>(); m_BoxOverlapChecker = new BoxOverlapChecker( m_CellScale, m_GridSize, m_RotateWithAgent, m_ColliderMask, gameObject, m_DetectableTags, m_InitialColliderBufferSize, m_MaxColliderBufferSize ); // debug data is positive int value and will trigger data validation exception if SensorCompressionType is not None. m_DebugSensor = new GridSensorBase("DebugGridSensor", m_CellScale, m_GridSize, m_DetectableTags, SensorCompressionType.None); m_BoxOverlapChecker.RegisterDebugSensor(m_DebugSensor); var gridSensors = GetGridSensors(); if (gridSensors == null || gridSensors.Length < 1) { throw new UnityAgentsException("GridSensorComponent received no sensors. Specify at least one observation type (OneHot/Counting) to use grid sensors." + "If you're overriding GridSensorComponent.GetGridSensors(), return at least one grid sensor."); } foreach (var sensor in gridSensors) { if (ObservationStacks != 1) { m_Sensors.Add(new StackingSensor(sensor, ObservationStacks)); } else { m_Sensors.Add(sensor); } m_BoxOverlapChecker.RegisterSensor(sensor); } // Only one sensor needs to reference the boxOverlapChecker, so that it gets updated exactly once ((GridSensorBase)m_Sensors[0]).m_BoxOverlapChecker = m_BoxOverlapChecker; return(m_Sensors.ToArray()); }
internal void RegisterDebugSensor(GridSensorBase debugSensor) { GridOverlapDetectedDebug += debugSensor.ProcessDetectedObject; }