Определить позицию и поворот объекта относительно его Child

Общие вопросы о Unity3D

Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 17 мар 2011, 10:32

Вопрос в следующем: в сцене есть объект Parent, в его иерархическом списке есть объект Child со своей локальной позицией и поворотом. И есть некий отдельный объект Object. Требуется определить позицию и поворот, установив в которые Parent, его Child (в следствии его локальности по отношению к Parent) совпадет своими глобальными параметрами позиции и поворота с Object, т.е. визуально Child и Object будут находиться в одной и той же позиции и ориентации.

Надеюсь понятно выразился.
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03

Re: Определить позицию и поворот объекта относительно его Child

Сообщение waruiyume 17 мар 2011, 13:03

Переместите родителя в позицию цели,глобальное вращение родителя=(локальное вращение ребенка+вращение цели),сдвиньте родителя на вектор позиция_родителя-позиция_ребенка.
Способ через (полная Ж) :
Поменяйте родителя и ребенка местами в иерархии, выровняйте нового родителя, поменяйте обратно.
Если не секрет нафига козе баян?
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 17 мар 2011, 13:52

что-то не получаеться. waruiyume не могли бы проверить правильно ли я понял:

Синтаксис:
Используется javascript
Parent.transform.position = Aim.transform.position;
Parent.transform.rotation.Euler(Child.transform.localRotation.eulerAngles + Aim.transform.rotation.eulerAngles);
Parent.transform.position -= Child.transform.position;
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03

Re: Определить позицию и поворот объекта относительно его Child

Сообщение BlackMamba 17 мар 2011, 14:36

по идее, если повесить такой скрипт на объект, который нужно переместить, должно сработать.
Синтаксис:
Используется javascript
var Child : Object;
var Target : Object;
Child = GameObject.Find("Child");
Target = GameObject.Find("некий Object");
//перемещение
transform.position = Target.transform.position -  Child.transform.localPosition;
//если нужно только определить позицию но не перемещать, то так:
var MyNextPosition : Vector3 = Target.transform.position -  Child.transform.localPosition;
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 17 мар 2011, 14:49

В основном сложность возникает при определении поворота а не позиции.
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03

Re: Определить позицию и поворот объекта относительно его Child

Сообщение BlackMamba 17 мар 2011, 18:03

Синтаксис:
Используется javascript
var Child : Object;
var Target : Object;
Child = GameObject.Find("Child");
Target = GameObject.Find("некий Object");
var MyNextPosition : Vector3 = Target.transform.position -  Child.transform.localPosition;
var MyNextRotation : Quaternion = Target.transform.rotation - Child.transform.localRotation;

:p
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 17 мар 2011, 18:20

BlackMamba а разве для кватернионов определена операция вычитание?
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03

Re: Определить позицию и поворот объекта относительно его Child

Сообщение BlackMamba 18 мар 2011, 00:00

точно не знаю, но думаю - да, ну а как тогда Quaternion.Angle работает, если не с вычитанием. С ейлеровыми углами, думаю вычитание не совсем корректно, имхо
mail: _gdeMoiGusi@gmail.com
skype: Ellseworth
Аватара пользователя
BlackMamba
UNITрон
 
Сообщения: 305
Зарегистрирован: 06 янв 2011, 16:16
Откуда: Москва

Re: Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 18 мар 2011, 07:33

В документации для кватернионов определена только операция умножение (http://unity3d.com/support/documentation/ScriptReference/Quaternion.html). Да и Юнити выдает ошибку при попытки вычесть один кватернион из другого.
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03

Re: Определить позицию и поворот объекта относительно его Child

Сообщение Zaicheg 18 мар 2011, 09:50

Гугл говорит, что кватернионы вычитаются покомпонентно
www.cosmology.su/file.php?id=278
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Определить позицию и поворот объекта относительно его Child

Сообщение unityUser 18 мар 2011, 10:10

С вычитанием пробовал - не получается.

Но вот это вроде работает:

Синтаксис:
Используется javascript
public var Parent: GameObject;
public var Child: GameObject;
public var Aim: GameObject;


function Start() {     
        Parent.transform.position = Vector3.zero;
        var q: Quaternion = Quaternion.Inverse(Child.transform.rotation) * Parent.transform.rotation;
        Parent.transform.rotation = Aim.transform.rotation * q;
        Parent.transform.position = Aim.transform.position - Child.transform.position;
}


ПРИМЕЧАНИЕ: здесь не учитывается фактор масштабирования (Scale).
unityUser
UNец
 
Сообщения: 8
Зарегистрирован: 17 мар 2011, 10:03


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11