using UnityEngine; using UnityEngine.XR.ARFoundation; /// /// A component that can be used to access the most /// recently received light estimation information /// for the physical environment as observed by an /// AR device. /// [RequireComponent(typeof(Light))] public class LightEstimation : MonoBehaviour { [SerializeField] [Tooltip("The ARCameraManager which will produce frame events containing light estimation information.")] ARCameraManager m_CameraManager; /// /// Get or set the ARCameraManager. /// public ARCameraManager cameraManager { get { return m_CameraManager; } set { if (m_CameraManager == value) return; if (m_CameraManager != null) m_CameraManager.frameReceived -= FrameChanged; m_CameraManager = value; if (m_CameraManager != null & enabled) m_CameraManager.frameReceived += FrameChanged; } } /// /// The estimated brightness of the physical environment, if available. /// public float? brightness { get; private set; } /// /// The estimated color temperature of the physical environment, if available. /// public float? colorTemperature { get; private set; } /// /// The estimated color correction value of the physical environment, if available. /// public Color? colorCorrection { get; private set; } void Awake () { m_Light = GetComponent(); } void OnEnable() { if (m_CameraManager != null) m_CameraManager.frameReceived += FrameChanged; } void OnDisable() { if (m_CameraManager != null) m_CameraManager.frameReceived -= FrameChanged; } void FrameChanged(ARCameraFrameEventArgs args) { if (args.lightEstimation.averageBrightness.HasValue) { brightness = args.lightEstimation.averageBrightness.Value; m_Light.intensity = brightness.Value; } if (args.lightEstimation.averageColorTemperature.HasValue) { colorTemperature = args.lightEstimation.averageColorTemperature.Value; m_Light.colorTemperature = colorTemperature.Value; } if (args.lightEstimation.colorCorrection.HasValue) { colorCorrection = args.lightEstimation.colorCorrection.Value; m_Light.color = colorCorrection.Value; } } Light m_Light; }