1、计算初始的与
,将父子物体的向量差去掉旋转的影响;其中P为父物体,C为子物体,r为旋转,t为位置。
,即四元数的差表示四元数的两个四元数的角位移,比如ad=b,则d就定义为a和b的差。有
2、计算子物体的旋转与位置
有(Pr, Pt)表示父物体的旋转与位置,(表示1计算的旋转差与位置差,则:
,为子物体在世界坐标系下的旋转
,为子物体在世界坐标下的位置
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ApplyParentChild : MonoBehaviour
{
public GameObject parentObjOrg;
public GameObject childOrg;
public GameObject childObjCalc;
Vector3 deltaT;
Quaternion deltaR;
// Start is called before the first frame update
void Start()
{
Debug.Log("-------- Init diff -------");
deltaT = Quaternion.Inverse(parentObjOrg.transform.rotation) *(childOrg.transform.position - parentObjOrg.transform.position);
deltaR = Quaternion.Inverse(parentObjOrg.transform.rotation) * childOrg.transform.rotation;
}
// Update is called once per frame
void Update()
{
Vector3 parentPos = parentObjOrg.transform.position;
Quaternion parentRot = parentObjOrg.transform.rotation;
childObjCalc.transform.rotation = parentRot * deltaR;
childObjCalc.transform.position = parentRot * deltaT + parentPos;
}
}