切换GoogleARCore为XR.ARFoundation后提示Frame不存在当前上下文如何解决
报错原因
Frame是Google ARCore原生SDK的专属类,ARFoundation跨平台AR框架没有提供该API,因此会报当前上下文不存在Frame的错误,需要改用ARFoundation原生的光照估计接口获取数据。
解决步骤
- 确认场景中AR Session Origin对象挂载了
ARCameraManager组件,并且在组件设置中开启了光照估计功能,根据需求选择对应的参数采集类型(仅需亮度的话选择平均强度即可) - 修改现有脚本,通过
ARCameraManager获取光照估计数值,修改后的完整代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.XR.ARFoundation; public class LightEstimationTest : MonoBehaviour { // 声明ARCameraManager字段,将场景中的ARCameraManager组件拖到该字段赋值 public ARCameraManager arCameraManager; [Range(0f,1f)] public float testValue = 0.5F; void OnValidate() { setGlobalLightEstimation(testValue); } void setGlobalLightEstimation(float lightValue) { Shader.SetGlobalFloat("_GlobalLightEstimation", lightValue); } void Update() { // 先判空避免空引用报错 if (arCameraManager != null && arCameraManager.currentLightEstimation.averageBrightness.HasValue) { // 从ARCameraManager获取平均亮度值,对应原ARCore的PixelIntensity参数 float lightIntensity = arCameraManager.currentLightEstimation.averageBrightness.Value; setGlobalLightEstimation(lightIntensity); } } }
若不想手动拖入组件赋值,可以在
Awake生命周期方法中添加arCameraManager = FindObjectOfType<ARCameraManager>();自动获取场景中的ARCameraManager实例。
内容的提问来源于stack exchange,提问作者braop
相关产品推荐
相关产品推荐

