using UnityEngine; using UnityEngine.Serialization; namespace MLAgents.Sensors { /// /// A SensorComponent that creates a . /// [AddComponentMenu("ML Agents/Camera Sensor", (int)MenuGroup.Sensors)] public class CameraSensorComponent : SensorComponent { [HideInInspector, SerializeField, FormerlySerializedAs("camera")] Camera m_Camera; CameraSensor m_Sensor; /// /// Camera object that provides the data to the sensor. /// public new Camera camera { get { return m_Camera; } set { m_Camera = value; UpdateSensor(); } } [HideInInspector, SerializeField, FormerlySerializedAs("sensorName")] string m_SensorName = "CameraSensor"; /// /// Name of the generated object. /// Note that changing this at runtime does not affect how the Agent sorts the sensors. /// public string sensorName { get { return m_SensorName; } set { m_SensorName = value; } } [HideInInspector, SerializeField, FormerlySerializedAs("width")] int m_Width = 84; /// /// Width of the generated observation. /// Note that changing this after the sensor is created has no effect. /// public int width { get { return m_Width; } set { m_Width = value; } } [HideInInspector, SerializeField, FormerlySerializedAs("height")] int m_Height = 84; /// /// Height of the generated observation. /// Note that changing this after the sensor is created has no effect. /// public int height { get { return m_Height; } set { m_Height = value; } } [HideInInspector, SerializeField, FormerlySerializedAs("grayscale")] public bool m_Grayscale; /// /// Whether to generate grayscale images or color. /// Note that changing this after the sensor is created has no effect. /// public bool grayscale { get { return m_Grayscale; } set { m_Grayscale = value; } } [HideInInspector, SerializeField, FormerlySerializedAs("compression")] SensorCompressionType m_Compression = SensorCompressionType.PNG; /// /// The compression type to use for the sensor. /// public SensorCompressionType compression { get { return m_Compression; } set { m_Compression = value; UpdateSensor(); } } /// /// Creates the /// /// The created object for this component. public override ISensor CreateSensor() { m_Sensor = new CameraSensor(m_Camera, m_Width, m_Height, grayscale, m_SensorName, compression); return m_Sensor; } /// /// Computes the observation shape of the sensor. /// /// The observation shape of the associated object. public override int[] GetObservationShape() { return CameraSensor.GenerateShape(m_Width, m_Height, grayscale); } /// /// Update fields that are safe to change on the Sensor at runtime. /// internal void UpdateSensor() { if (m_Sensor != null) { m_Sensor.camera = m_Camera; m_Sensor.compressionType = m_Compression; } } } }