Объект с CharacterController'ом как выровнять на террайне[РЕ

Программирование на Юнити.

Объект с CharacterController'ом как выровнять на террайне[РЕ

Сообщение monah 03 фев 2011, 11:20

Нужно сделать так чтобы модель при движении выравнивалась по наклону ланшафта. Когда еще занимался движком OGRE 3d я райкастил на террайн получал нормаль и выравнивал модель по нормали. Там проблем не было так как модель и CharacterController работали отдельно друг от друга и модель можно было крутить как заблагорассудится. В [unity 3D] когда я попытался повторить это ГО начало плющить не по детски. Подскажите как можно это сделать в [unity 3D] ?
Последний раз редактировалось monah 07 фев 2011, 17:42, всего редактировалось 1 раз.
monah
UNец
 
Сообщения: 27
Зарегистрирован: 27 дек 2010, 18:42

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение Zaicheg 03 фев 2011, 11:52

monah писал(а):Нужно сделать так чтобы модель при движении выравнивалась по наклону ланшафта. Когда еще занимался движком OGRE 3d я райкастил на террайн получал нормаль и выравнивал модель по нормали. Там проблем не было так как модель и CharacterController работали отдельно друг от друга и модель можно было крутить как заблагорассудится. В [unity 3D] когда я попытался повторить это ГО начало плющить не по детски. Подскажите как можно это сделать в [unity 3D] ?

Вы можете разместить модель (то есть, геймобъект с компонентами MeshRenderer и MeshFilter) и физический объект (ГО с CharacterController) отдельно друг от друга, Unity этому не препятствует. Просто поэкспериментируйте с иерархией.
В целом же, если вы хотите использовать (частично) ручное позиционирование персонажа, то имеет смысл отказаться от Character Controller и либо использовать Rigidbody+Transform, либо вообще один Transform.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение monah 03 фев 2011, 15:49

Zaicheg писал(а):Вы можете разместить модель (то есть, геймобъект с компонентами MeshRenderer и MeshFilter) и физический объект (ГО с CharacterController) отдельно друг от друга, Unity этому не препятствует.

Вот так у меня получилось, модель выравнивается по террайну, но когда я поворачиваю модель после поворота первая же попытка выравнять модель приводит к ее разворачиванию в исходное положение. Вот код выравнивания:
Синтаксис:
Используется csharp
RaycastHit hit;
if(Physics.Raycast(new Vector3(transform.position.x, 1000, transform.position.z), new Vector3(0, -1, 0), out hit, 1500))
{
        transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
        Debug.DrawRay(hit.point, hit.normal, Color.red);
}
 

Подскажите где я тут натупил?
monah
UNец
 
Сообщения: 27
Зарегистрирован: 27 дек 2010, 18:42

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение Zaicheg 03 фев 2011, 16:05

Мне этот код почти ни о чём не сказал. Тестовый проект глянул бы в ближайшие дни.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение Golandez 03 фев 2011, 23:38

TerrainData. GetInterpolatedNormal ?
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение seaman 04 фев 2011, 08:58

transform.rotation полностью задает ориентацию модели в пространстве. Ты ее устанавливаешь = Quaternion.FromToRotation При этом то, что у тебя было осью Y выстраивается по нормали. Что происходит с осями X и Z из мануала непонятно. Но Quaternion.FromToRotation явно выдает их какие-то определенные. Естественно при первой же обращение к функции выравнивания по нормали все твои ручные повороты будут отменены. Нужно устанавливать только ось Y модели по нормали. А в плоскости X-Z крутить ее вручную. Как это сделать? Не уверен, еще плохо знаю АПИ Юнити, но где-то так:
Синтаксис:
Используется csharp
float angle = 0.0F;
Vector3 axis = Vector3.zero;
RaycastHit hit;
if(Physics.Raycast(new Vector3(transform.position.x, 1000, transform.position.z), new Vector3(0, -1, 0), out hit, 1500))
{
     transform.rotation.ToAngleAxis(ref angle, ref axis);
     transform.rotation = Quaternion.AngleAxis(angle, hit.normal);
}
 
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Объект с CharacterController'ом как выровнять на террайне

Сообщение monah 07 фев 2011, 17:40

Ответ нашелся на офф форуме вот так все работает:
Синтаксис:
Используется csharp
if(Physics.Raycast(new Vector3(transform.position.x, 500, transform.position.z), new Vector3(0, -1, 0), out hit, 500))
{
        Quaternion q = Quaternion.FromToRotation(Vector3.up, hit.normal);
        Quaternion newRot = q * Quaternion.AngleAxis(transform.rotation.eulerAngles.y, Vector3.up);
        transform.rotation = Quaternion.Slerp(transform.rotation, newRot, 0.5f);
}
 

Слово РЕШЕНО в название не влезло :(
monah
UNец
 
Сообщения: 27
Зарегистрирован: 27 дек 2010, 18:42


Вернуться в Скрипты

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 8


cron