Unity устанавливает положение родительских объектов, равное их дочернему положению

У меня есть два 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;
}

Итак, вам нужен opt1: (sphere.pos = s1.pos и цилиндр.pos = c1.pos), opt2: (c1.pos = s1.pos и сфера.pos != цилиндр.pos ) или что-то еще? Я не совсем понимаю, что вы хотите сделать.

Daruden 08.05.2019 05:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
1 351
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

cyclinder.transform.position = s1.transform.position - (c1.transform.localposition/4);

За этим стоит какая-то математика или просто работает на вас?

cjf93 08.05.2019 09:43
Ответ принят как подходящий

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

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

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

Например:

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;

Другие вопросы по теме

Похожие вопросы