Animation 制作一个被操纵的字符';s的头部与一个四元数同步旋转

Animation 制作一个被操纵的字符';s的头部与一个四元数同步旋转,animation,unity3d,Animation,Unity3d,我有一个人脸检测应用程序,我希望角色的头部根据检测到的人脸姿势旋转 我已经设法以四元数的形式获得检测到的人脸的旋转,但我不确定如何将四元数中的数据转换为3D点,以用于我认为将决定旋转的装配角色的参考点 假设我有这样的性格: 一种解决方案是,只需切断头部,使其成为自己的对象,然后根据四元数设置该对象的旋转,但我不希望这样。我想要一个完整的角色 是否可以使用四元数中的数据移动头部中的参考点?还是我搞错了被操纵的角色是如何转头的?我以前没有设置过动画。可以对单个骨骼应用旋转。把那根骨头放进你的剧本里。

我有一个人脸检测应用程序,我希望角色的头部根据检测到的人脸姿势旋转

我已经设法以四元数的形式获得检测到的人脸的旋转,但我不确定如何将四元数中的数据转换为3D点,以用于我认为将决定旋转的装配角色的参考点

假设我有这样的性格:

一种解决方案是,只需切断头部,使其成为自己的对象,然后根据四元数设置该对象的旋转,但我不希望这样。我想要一个完整的角色


是否可以使用四元数中的数据移动头部中的参考点?还是我搞错了被操纵的角色是如何转头的?我以前没有设置过动画。

可以对单个骨骼应用旋转。把那根骨头放进你的剧本里。在类中保留一个var,以在更新和每次更新中存储最后一个四元数,并将其与之进行比较,并按不同的值旋转。我这里没有实际的编辑器,但请尝试此伪代码

class NeckRotator {
    public GameObject Neck;
    private Quaternion LastFace;


    void Start(){
        LastFace = Neck.transform.Rotation;
    }

    void Update(){
        var DetectedFace = ... // Whatever you do to get this
        var Change = Quaternion.Inverse(DetectedFace) * LastFace; // Found this online real quick
        Neck.Rotate(Change);
        LastFace = Neck.transform.Rotation;
    }
}

我以前做过类似的事情,旋转NPC的脖子看球员。这对你的交易也应该有用。

等等,a和b应该是什么?我的错。这是被检测到的脸和最后一张脸。尽管这可能是相反的。此外,LastFace应该是上次更新时颈部的四元数。我想你会得到这样的结果,对吧?我不需要计算倒数。我可以用四元数设置骨骼的旋转。谢谢。我很高兴它对你有用!当我个人这么做的时候,当其他事情导致骨骼的旋转发生变化时,它会引起问题。骨头不会像我希望的那样随着身体的其他部分转动。如果遇到相同的问题,您可以尝试以下方法: