Куб поставить на куб сохранив угол наклона, но и не смещая по осям Unity

Ставлю я один куб на другой куб. Ну если у них вращения нуль, то никаких проблем. Всё просто:

Vector3 pos = new Vector3 (0, 0, 0); // whatever
Quaternion rot = new Quaternion (0,0,0,1);
 GameObject cube1 = Instantiate (cube_prefab, pos, rot);
// positioning cube2 on top of cube1
pos.y ++;
// that was easy
GameObject cube2 = Instantiate (cube_prefab, pos, rot);

Но вот стоит их начать вращать и начинается беда. На вот таком маленьком угле можно вот такую формулу применить и будет более-менее, но на самом деле там уже и x и z немного слетают и прикрепляется куб к кубу не ровно

Vector3 pos = new Vector3 (0, 0, 0); // whatever
    Quaternion rot = new Quaternion (-0.14,0,0,0.98);
     GameObject cube1 = Instantiate (cube_prefab, pos, rot);
    // positioning cube2 on top of cube1
    pos.y = pod.y + mathf.abs(cube1.rotation.x)*2 + mathf.abs(cube1.rotation.z)*2;
    // too far from perfect, even good
    GameObject cube2 = Instantiate (cube_prefab, pos, rot);

В общем, нужно какой-то универсальный метод под любой кватернион, чтоб плотненько кубик на кубик становился и получался такой прямоугольный параллелепипед. Но желательно без raycasting.


Ответы (1 шт):

Автор решения: Yaroslav
private GameObject SpawnCubeUp (Transform baseCube) 
{
    GameObject newCube = Instantiate(_cubeTemplate);
    Transform targetCube = newCube.transform;
    float height = baseCube.localScale.y+targetCube.localScale.y;
    height *= 0.5f;
    targetCube.position = baseCube.up*height;
    targetCube.eulerAngles = baseCube.eulerAngles;
    return newCube;
}
→ Ссылка