Настройка Unity Положение родительских объектов равно их дочернему положению - PullRequest
0 голосов
/ 08 мая 2019

У меня есть два 3D-объекта, в конечном итоге это будут 3D-модели разных размеров и форм, но я пытаюсь получить правильную базовую функциональность.

Одна представляет собой обычную Сферу с дочерним игровым объектом в позиции (0, -0,5,0) с именем s1.

Один - это масштабированный цилиндр (0.3,0.3,0.3) с дочерним игровым объектом в позиции (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;
}

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Хотя ваш вопрос не очень ясен, я думаю, вы имеете в виду, что вы пытаетесь расположить свой цилиндр и сферу таким образом, чтобы их дочерние объекты (s1 и c1) находились в одной и той же позиции в мире.

Шаги, которые я бы выполнил:

  • Рассчитать смещение в мировом пространстве между дочерним и его родительским объектами (обычно это будет просто localPosition вашего дочернего объекта, но, поскольку вы также применяете localScale, это учитывается путем ручного вычисления вектора смещения с использованием world позиции)
  • Установить родительскую позицию на новую позицию + вышеуказанное смещение

Например:

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;
0 голосов
/ 08 мая 2019

Ответ на это должен сделать

cyclinder.transform.position = s1.transform.position - (c1.transform.localposition/4);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...