C# ARSessionOrigin变换位置和旋转,使创建的ArtrackDimage变为单位空间零
我正在使用带有跟踪图像的C# ARSessionOrigin变换位置和旋转,使创建的ArtrackDimage变为单位空间零,c#,unity3d,augmented-reality,C#,Unity3d,Augmented Reality,我正在使用带有跟踪图像的ARFoundation(图像库只有一个图像可供查找)。 当图像被找到时,我将订阅该事件 [SerializeField] ARTrackedImageManager _arTrackedImageManager; void Awake() { _arTrackedImageManager.trackedImagesChanged += ImageChangedHandle; } void ImageChangedHandle(ARTrackedImagesC
ARFoundation
(图像库只有一个图像可供查找)。
当图像被找到时,我将订阅该事件
[SerializeField]
ARTrackedImageManager _arTrackedImageManager;
void Awake()
{
_arTrackedImageManager.trackedImagesChanged += ImageChangedHandle;
}
void ImageChangedHandle(ARTrackedImagesChangedEventArgs imgChangedArgs)
{
foreach (var item in imgChangedArgs.added)
{
var go = item.gameObject;
_arkitChecker.DisplayFoundTrackedImage(item);
}
}
_arkitChecker是具有DisplayFoundTrackeImage方法的我的类的实例:
internal void DisplayFoundTrackedImage(ARTrackedImage targetImageGameObject)
{
var arOrig = GameObject.FindObjectOfType<ARSessionOrigin>();
arOrig.transform.Translate(-targetImageGameObject.transform.position, Space.World);
float babyAngle;
Vector3 babyAxis;
targetImageGameObject.transform.rotation.ToAngleAxis(out babyAngle, out babyAxis);
arOrig.transform.RotateAround(Vector3.zero, babyAxis, -babyAngle);
}
我只需要解决同样的问题,我能够使用
ARSessionOrigin
MakeContentAppearAt()
方法,使用跟踪图像的位置和旋转(我使用的是ARFoundation v3.0.0 preview 4)
该方法没有很好的文档记录,经过一些尝试和错误,我发现您需要使用跟踪图像的localRotation
,而不是世界空间rotation
,否则方向将不正确
无论何时找到或更新跟踪的图像,我都会运行以下操作:
void onTrackedImageSchangedEventArgs(ArtrackDimagesSchangedEventArgs)
{
如果(eventArgs.updated.Count>0)
{
ARTRACKDIMAGE trackedImage=eventArgs.updated[0];
arSessionOrigin.MakeContentAppearAt(worldOrigin.transform、TrackeImage.transform.position、TrackeImage.transform.localRotation);
}
}
worldOrigin.transform
只是一个位于位置0,0,0的空游戏对象,没有旋转
因此,这段代码的意思是:我希望worldOrigin变换通过调整AR相机的变换进行补偿(worldOrigin.transform未修改),使其看起来好像位于轨迹图像位置/旋转处
arOrig.MakeContentAppearAt(targetImageGameObject.transform, Vector3.zero, Quaternion.identity);