1.版本问题
MR这块,SDK 2.5.0的版本不支持pico4 Ultra!!
pico4 Ultra必须用pico SDK3.0以上的版本!
2.在使用空间锚点时,有可能会在创建锚点的时候返回结果ERROR_VALIDATION_FAILURE,这个如果你确定传入的参数都没有问题,那么就可能是还没开启空间锚点,需要先开空间锚点功能,代码和PXR_Manager设置都要
3.开启功能时,需要延迟两秒,不要在游戏一运行时就开启,比如开启锚点或者房间标定
4.关于场景标定的坐标相关
场景标定中,我们需要获取物体的坐标和旋转信息,比如:
csharp
public static PxrResult GetSceneBox3DData(ulong anchorHandle, out Vector3 position, out Quaternion rotation, out Vector3 extent)
获取3D物体的数据,但是我们要注意,这些场景锚点的position,rotation,都是相对于锚点坐标的偏移 !
并不能直接将position赋值给cube.transform.position,他是以锚点为原点的,所以实际上使用的时候,可以如下做法:
1.创建一个空物体
2.将锚点坐标handPos和锚点旋转handleRotation赋值给空物体
3.然后再把position赋值给cube
4.之后将cube设置为锚点物体的子物体,代码如下
csharp
PxrResult posResult = PXR_MixedReality.LocateAnchor(handle, out handlePos, out handleRotation);
var result = PXR_MixedReality.GetSceneBox3DData(handle, out var position, out var newRotation, out var extent);
var sceneAnchor = new GameObject(handle.ToString());
var box3D = GameObject.CreatePrimitive(PrimitiveType.Cube);
box3D.transform.localPosition = position;
box3D.transform.rotation = newRotation;
box3D.transform.localScale = extent;
box3D.transform.SetParent(sceneAnchor.transform);
sceneAnchor.transform.rotation = handleRotation;
sceneAnchor.transform.position = handlePos;