我尝试了一个带有 1 个摄像头的简单 Unity 程序,该程序带有跟踪姿势驱动器。结果如下所示:当给定 XYZ 格式的欧拉角时:向上俯仰 <=> X 减小向下俯仰 &...
我尝试了一个带有 1 个摄像头和一个跟踪姿势驱动器的简单 Unity 程序。结果如下所示:
当给定 XYZ 格式的欧拉角时:
所有证据似乎表明 Unity 欧拉角使用 LDB(左下后)坐标系,具有右手旋转和右手轴顺序。
然而,在处理四元数时,许多文献暗示使用左手系统。
这些文件说的是事实吗?如果是,那么在不同协议之间转换时会造成很多麻烦。这种分歧的目的是什么?
您应该使用 Microsoft 的 Reactive Framework(又名 Rx)-NuGet System.Reactive
并添加 using System.Reactive.Linq;
- 然后您可以执行以下操作:
public void Load2(Action onComplete)
{
(
from kvp in _db.ToObservable()
let key = kvp.Key
let assetRef = kvp.Value
let assetLoader = assetRef.LoadAssetAsync<TAsset>()
from handle in
Observable
.FromEvent<Action<AssetHandle>, AssetHandle>(
h => assetLoader.Completed += h,
h => assetLoader.Completed -= h)
.Take(1)
where handle.Status == AsyncOperationStatus.Succeeded
select new { key, handle.Result }
)
.Subscribe(
x => _loadedAssets.Add(x.key, x.Result),
() => onComplete());
}
现在,这应该可以了。我不得不对某些类型进行逆向工程,但我想我已经解决了。竞争条件仍然存在于您的代码中。