Куб поставить на куб сохранив угол наклона, но и не смещая по осям 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;
}