WheelCollider.rmp и вращение меша

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

WheelCollider.rmp и вращение меша

Сообщение Paf0s 25 янв 2012, 15:56

Доброго времени суток!
Буквально недавно начал изучение Unity и многие компоненты для меня остаются загадкой, такие как Configurabl Joint, но речь не об этом.
Задача такова, что нужно реализовать физику мотоцикла. С самой физикой (вращение, центр тяжести и пр.) вроде как разобрался и сделал, а вот как заставить меши колес вращаться вслед за WheelCollider - не представляю.
transform.rotation=Vector3(x,y,z); для меша
Сам-же WheelCollider имеет такую переменную "rmp", если я правильно понял, то это обороты в минуту. Но в каком виде оно возвращает значение в каких единицах и прочее?
Как мне связать rmp и вращение меша колеса? Вторые сутки бьюсь головой об стену...
Или кто как может-быть по-другому реализует вращение колеса?
Paf0s
UNец
 
Сообщения: 4
Зарегистрирован: 29 дек 2011, 13:18

Re: WheelCollider.rmp и вращение меша

Сообщение Neyl 25 янв 2012, 17:00

rpm - обороты в минуту, например так можно вращать
Синтаксис:
Используется csharp
transform.Rotate(WheelCol.rpm * 6 * Time.deltaTime, 0, 0);
Аватара пользователя
Neyl
UNIверсал
 
Сообщения: 404
Зарегистрирован: 20 июн 2010, 10:17

Re: WheelCollider.rmp и вращение меша

Сообщение Paf0s 25 янв 2012, 18:16

пробовал точно такой-же код... только на жабе
А может как-то Fixed Join действовать на вращение колеса?
Paf0s
UNец
 
Сообщения: 4
Зарегистрирован: 29 дек 2011, 13:18

Re: WheelCollider.rmp и вращение меша

Сообщение DDDENISSS 25 янв 2012, 18:59

Здесь http://habrahabr.ru/blogs/gdev/115557/ написано как вращать колесо.
Если верить той статье, то вращаем в FixedUpdate на угол Time.fixedDeltaTime * wheel.col.rpm * 360.0f / 60.0f
Аватара пользователя
DDDENISSS
UNIверсал
 
Сообщения: 439
Зарегистрирован: 11 сен 2011, 20:33

Re: WheelCollider.rmp и вращение меша

Сообщение IDoNotExist 26 янв 2012, 13:38

DDDENISSS писал(а):Здесь http://habrahabr.ru/blogs/gdev/115557/ написано как вращать колесо.
Если верить той статье, то вращаем в FixedUpdate на угол Time.fixedDeltaTime * wheel.col.rpm * 360.0f / 60.0f

Если будете будете вращать на этот угол, колесо у вас будет вращаться более чем на 360 градусов, нужно использовать Mathf.Repeat(), чтобы отсекать углы больше 360 градусов, в общем случае будет чтото вроде этого:
Синтаксис:
Используется csharp
public class WheelRotator : MonoBehaviour{
   
   public WheelCollider wCollider;

   private float wheelRotationAngle = 0f;

   void FixedUpdate(){
       wheelRotationAngle = Mathf.Repeat(wheelRotationAngle + Time.fixedDeltaTime * wCollider.rpm * 360.0f / 60.0f, 360.0f);    
       transform.localRotation = Quaternion.Euler(wheelRotationAngle, 0f, 0f);
   }
}
 

Вот и все, скрипт вешается на колесо если что, колесо будет вращаться вокруг оси X, если нужно чтобы вращалось по другой оси меняете местами значения в последней строке, где Quaternion.Euler();
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: WheelCollider.rmp и вращение меша

Сообщение Paf0s 27 янв 2012, 05:08

Большое Спасибо)
Все прекрасно работает. Дело-то какраз было в углах больше 360. Спасибо Math.Repeat
Paf0s
UNец
 
Сообщения: 4
Зарегистрирован: 29 дек 2011, 13:18


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

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

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