AR之道

AR Foudation案例解析(四) ------ Light

2019-07-01  本文已影响1人  千喜Ya

一.环境

案例网址 : https://github.com/Unity-Technologies/arfoundation-samples.git
官方文档网址 : https://docs.unity3d.com/Packages/com.unity.xr.arfoundation@2.2/api/UnityEngine.XR.ARFoundation.html
Unity版本 : 2019.3.0
SDK版本 :

二.案例解析

1.功能

获取光估计信息

2.项目结构分析


主要脚本在Directional Light :


3.代码解析

using UnityEngine;
using UnityEngine.XR.ARFoundation;

/// <summary>
/// 一种组件,可用于访问AR设备所观察到的物理环境中最近接收到的光估计信息。
/// </summary>
[RequireComponent(typeof(Light))]
public class LightEstimation : MonoBehaviour
{
    [SerializeField]
    [Tooltip("The ARCameraManager which will produce frame events containing light estimation information.")]
    ARCameraManager m_CameraManager;

    /// <summary>
    /// Get or set the <c>ARCameraManager</c>.
    /// </summary>
    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;
        }
    }

    /// <summary>
    ///物理环境的估计亮度(如果可用)。
    /// </summary>
    public float? brightness { get; private set; }

    /// <summary>
    /// 物理环境的估计色温(如果可用)。
    /// </summary>
    public float? colorTemperature { get; private set; }

    /// <summary>
    /// 估计的物理环境的颜色校正值,如果可用。
    /// </summary>
    public Color? colorCorrection { get; private set; }

    void Awake ()
    {
        m_Light = GetComponent<Light>();
    }

    void OnEnable()
    {
        //添加ARCameraFrameEventArgs每帧监听事件
        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;
}
上一篇 下一篇

猜你喜欢

热点阅读