У меня есть два 3D-объекта, в конечном итоге они будут 3D-моделями разных размеров и форм, но я пытаюсь правильно выполнить базовую функциональность.
Один из них — обычная Sphere с дочерним объектом gameObject в позиции (0,-0.5,0) с именем s1.
Один из них представляет собой цилиндр в масштабе (0,3,0,3,0,3) с дочерним объектом gameObject в позиции (0,0,5,0) с именем c1.
Я пытаюсь переместить объекты, чтобы два родителя были выровнены в одной и той же позиции дочернего объекта.
Приведенный ниже код перемещает положение цилиндра непосредственно в положение s1. У меня просто проблемы с векторной математикой, поэтому позиция c1 находится непосредственно на позиции s1. Я пробовал несколько разных сложений, вычитаний, делений, чтобы заставить их выровняться, но не повезло. Любая помощь в понимании того, как решить эту проблему, будет высоко оценена.
public GameObject sphere;
public GameObject cyclinder;
private GameObject s1;
private GameObject c1;
// Start is called before the first frame update
void Start()
{
s1 = sphere.transform.Find("s1").gameObject;
c1 = cyclinder.transform.Find("c1").gameObject;
cyclinder.transform.position = s1.transform.position;
}





Ответ на это сделать
cyclinder.transform.position = s1.transform.position - (c1.transform.localposition/4);
За этим стоит какая-то математика или просто работает на вас?
Хотя ваш вопрос не очень ясен, я думаю, вы имеете в виду, что пытаетесь расположить свой цилиндр и сферу таким образом, чтобы их дочерние объекты (s1 и c1) имели точно такое же положение в мире.
Шаги, которые я бы выполнил:
Например:
Vector3 finalPos = ... // Position I want both s1 and c1 to share
// Cylinder: world offset, moving from c1 to the parent object
Vector3 cylOffset = cylinder.transform.position - c1.transform.position;
// Position the cylinder, and apply the offset
cylinder.transform.position = finalPos + cylOffset;
// Sphere: world offset, moving from s1 to the parent object
Vector3 sphereOffset = sphere.transform.position - s1.transform.position;
// Position the sphere, and apply the offset
sphere.transform.position = finalPos + sphereOffset;
Итак, вам нужен opt1: (sphere.pos = s1.pos и цилиндр.pos = c1.pos), opt2: (c1.pos = s1.pos и сфера.pos != цилиндр.pos ) или что-то еще? Я не совсем понимаю, что вы хотите сделать.