internal void RegisterSensor(GridSensorBase sensor) { #if MLA_UNITY_PHYSICS_MODULE if (sensor.GetProcessCollidersMethod() == ProcessCollidersMethod.ProcessAllColliders) { GridOverlapDetectedAll += sensor.ProcessDetectedObject; } else { GridOverlapDetectedClosest += sensor.ProcessDetectedObject; } #endif }
/// <inheritdoc/> public override ISensor[] CreateSensors() { m_GridPerception = new BoxOverlapChecker( m_CellScale, m_GridSize, m_RotateWithAgent, m_ColliderMask, gameObject, AgentGameObject, 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_GridPerception.RegisterDebugSensor(m_DebugSensor); m_Sensors = GetGridSensors().ToList(); if (m_Sensors == null || m_Sensors.Count < 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."); } // Only one sensor needs to reference the boxOverlapChecker, so that it gets updated exactly once m_Sensors[0].m_GridPerception = m_GridPerception; foreach (var sensor in m_Sensors) { m_GridPerception.RegisterSensor(sensor); } if (ObservationStacks != 1) { var sensors = new ISensor[m_Sensors.Count]; for (var i = 0; i < m_Sensors.Count; i++) { sensors[i] = new StackingSensor(m_Sensors[i], ObservationStacks); } return(sensors); } else { return(m_Sensors.ToArray()); } }
/// <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) { #if MLA_UNITY_PHYSICS_MODULE GridOverlapDetectedDebug += debugSensor.ProcessDetectedObject; #endif }