Пример #1
0
 internal void RegisterSensor(GridSensorBase sensor)
 {
     if (sensor.GetProcessCollidersMethod() == ProcessCollidersMethod.ProcessAllColliders)
     {
         GridOverlapDetectedAll += sensor.ProcessDetectedObject;
     }
     else
     {
         GridOverlapDetectedClosest += sensor.ProcessDetectedObject;
     }
 }
Пример #2
0
        /// <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());
        }
Пример #3
0
 internal void RegisterDebugSensor(GridSensorBase debugSensor)
 {
     GridOverlapDetectedDebug += debugSensor.ProcessDetectedObject;
 }