我已经寻找这个问题的解决方案很长一段时间了(意思是好几天),但我还没有找到任何东西。也许我想错了,没有办法,但让我们试一试吧!
我在全息相机( Unity Hololens Input Simulation )上记录手部数据。这实际上为每个transform.position.x到z和rotation.x到w的每个手关节提供了一个float AnimationCurve。现在我的目标是将这些曲线放到AnimationClip中,并(通过AnimatorOverrideController)将其添加到AnimatorController中,该and可以设置手动钻机的动画并重放录制的内容。到目前为止,一切都正常!
然而,来自全息影像的手写数据是世界尺度的,而不是局部尺度的。(这是有道理的,因为当您想知道手的位置时,通常需要绝对坐标。)但是为了动画手,我似乎只能设置局部坐标,这是我没有的。
示例:
clip.SetCurve("", typeof(Transform), "localPosition.x", curve.PositionX);在这里,剪辑从某个手部关节获取x坐标,并将其放置到相应手部钻机关节的localPosition.x。问题:curve.PositionX是世界尺度(绝对坐标),但localPosition.x采用局部尺度(相对于其父对象的坐标)。
我不能简单地将"localPosition.x"更改为"position.x",如下所示:
clip.SetCurve("", typeof(Transform), "position.x", curve.PositionX);即使Transform类同时具有属性和位置,也是对象的世界比例位置。我不确定为什么它不能工作,但它给我以下错误:
Cannot bind generic curve on Transform component, only position, rotation and scale curve are supported.我知道在动画中使用绝对坐标没有多大意义,但我就是没有其他的坐标。
有没有人有办法让我以一种明智的、不太麻烦的方式来处理这个问题?似乎我有所有重要的部分,我只是想不出如何把它们放在一起。已经非常感谢了!:)
发布于 2020-10-30 17:16:17
根据我的基本理解,您似乎正在使用MRTK提供的Input animation recording service。不幸的是,MRTK不提供localPosition版本的曲线数据。但是,您可以在InputRecordingService停止录制后修改recordingBuffer中的数据。
因此,这是一种值得尝试的方法:在recordingBuffer字段的handJointCurves字典属性中,为每个关节存储了一组姿势曲线。然后,根据该表:Joint pose curves,从每个关键帧中每个关节的位置值中减去关键None的位置值,得到基于关键None的localPosition。
https://stackoverflow.com/questions/64597595
复制相似问题