c# - AR Foundation - TrackedPoseDriver 组件未缓存在更新循环中
问题描述
下面的片段引用自 ARFoundation 包 2.0.0-preview.22 中的 ARSessionOrigin.cs
#if !UNITY_WEBGL
Pose GetCameraOriginPose()
{
var trackedPoseDriver = camera.GetComponent<TrackedPoseDriver>();
if (trackedPoseDriver != null)
{
var localOriginPose = trackedPoseDriver.originPose;
var parent = camera.transform.parent;
if (parent == null)
return localOriginPose;
return parent.TransformPose(localOriginPose);
}
return Pose.identity;
}
void Update()
{
if (camera != null)
{
// Make sure the trackables has the same local transform as the camera's origin
var pose = GetCameraOriginPose();
trackablesParent.position = pose.position;
trackablesParent.rotation = pose.rotation;
}
}
#endif
显然GetComponent
每个更新循环都会调用以更新相机姿势。为什么不将组件缓存为字段值?如果有人告诉我确切的原因,那就太好了。
解决方案
通过添加私有字段并引用 Awake 或 Start 方法中的值来缓存组件,对我来说多次引用同一个组件是没有意义的。
private TrackedPoseDriver _trackedPoseDriver;
private void Start()
{
_trackedPoseDriver = camera.GetComponent<TrackedPoseDriver>();
}
推荐阅读
- python - 当我尝试导入 facebook 先知时:pip install fbprophet ...我总是收到此错误
- javascript - Google Cloud Vision API 文本检测检测错误语言
- postgresql - 堆栈生成器没有响应
- assembly - 我对在汇编语言中使用 div 函数的这段代码感到困惑
- angular - Angular 和 ng-image-slider - 一次只显示一张图片
- amazon-web-services - 如何解决 beanstalk 中的 HTTP ERROR 500?
- java - java.lang.RuntimeException: java.lang.RuntimeException: java.io.IOException: com.android.ide.common.process.ProcessException 在 android studio
- apache-flink - 在 Flink 运算符中读取外部文件(如图像)的最佳解决方案是什么?
- java - Junit5测试无法注入依赖但正常运行的应用程序可以注入它
- azure - Azure Pipelines:比较两个日期之间的测试结果