
本文共 1408 字,大约阅读时间需要 4 分钟。
最近在做捏脸查了很多资料大概有思路了,已知animator改变骨骼的transform是在update阶段
故此留给我们的大概只有lateudpate中去修改骨骼的transform 。比如骨骼捏脸我们设置了一个旋转四元数,animator对骨骼施加了另外一个四元数 。那么我们要做的就是求出来模型静止的时候
ab变换的那个t四元数。怎么求t呢 t * a = b 利用这个公式。四元数和矩阵的运算类似
这里 t = b * a-1 (a-1是a的逆 ) 假设animatro将物体改变到c 那么我们最终的骨骼变换
应该就是 d = t * c
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(TestOula))]
public class TestOulaEditor : Editor
{
public Quaternion a;
public Quaternion b;
public TestOula self
{
get
{
return target as TestOula;
}
}
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
if(GUILayout.Button("记录a四元数"))
{
a = self.transform.localRotation;
}
if(GUILayout.Button("计算变换四元素得到初始位置"))
{
var b = self.transform.localRotation;
var t = b * Quaternion.Inverse(a);
var reverseT = Quaternion.Inverse(t);
self.transform.localRotation = reverseT * b; //
}
if (GUILayout.Button("记录b四元数"))
{
b = self.transform.localRotation;
}
if(GUILayout.Button("从a到b"))
{
var t = b * Quaternion.Inverse(a);
var reverseT = Quaternion.Inverse(t);
self.transform.localRotation = t * a;
}
if (GUILayout.Button("从b到a"))
{
var t = b * Quaternion.Inverse(a);
var reverseT = Quaternion.Inverse(t);
self.transform.localRotation = reverseT * b;
}
}
}
public class TestOula : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
转载地址:https://blog.csdn.net/yangjie6898862/article/details/122675238 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
