using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ParentChild : MonoBehaviour
{
public GameObject p;
public GameObject c;
// Start is called before the first frame update
void Start()
{
// child to world
Quaternion childWorldRotation = p.transform.rotation * c.transform.localRotation;
Vector3 childWorldPosition = p.transform.position + p.transform.rotation * c.transform.localPosition; // [R|T]P = RP + T
Debug.Log("=========== Local to World ==============");
Debug.Log("Child world rotation: " + c.transform.rotation);
Debug.Log("Child world calc rotation:" + childWorldRotation);
Debug.Log("Child world position: " + c.transform.position);
Debug.Log("Child world calc position:" + childWorldPosition);
// world to local
Quaternion childLocalRotation = Quaternion.Inverse(p.transform.rotation) * c.transform.rotation;
Vector3 childLocalPosition = Quaternion.Inverse(p.transform.rotation) * (c.transform.position - p.transform.position); // Inverse(R) * DeltaT
Debug.Log("=========== World to Local ==============");
Debug.Log("Child local rotation: " + c.transform.localRotation);
Debug.Log("Child local calc rotation:" + childLocalRotation);
Debug.Log("Child local position: " + c.transform.localPosition);
Debug.Log("Child local calc position:" + childLocalPosition);
}
// Update is called once per frame
void Update()
{
}
}