using UnityEngine; using UnityEngine.Serialization; namespace Unity.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 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")] 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 CompressionType { 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, m_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; } } } }