Подвеска машины(амортизаторы)

Физика в Unity

Подвеска машины(амортизаторы)

Сообщение Nikitos47 28 окт 2016, 12:58

Всем привет!Как сделать такую физику колёс?На видео колёса нормально сжимаются(по оси У),а корпус при этом почти не двигается.У меня же корпус может и сальто сделать..Даже на небольших кочках.
https://www.youtube.com/watch?v=nUXZiyU3OqE
Nikitos47
UNITрон
 
Сообщения: 256
Зарегистрирован: 03 авг 2013, 21:48

Re: Подвеска машины(амортизаторы)

Сообщение Syberex 31 окт 2016, 10:08

Не хватает стабилизатора поперечной устойчивости ;)
Могу скинуть скрипт, сам где то брал не помню где...
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Подвеска машины(амортизаторы)

Сообщение Nikitos47 31 окт 2016, 21:02

Syberex писал(а):Не хватает стабилизатора поперечной устойчивости ;)
Могу скинуть скрипт, сам где то брал не помню где...

Скиньте,если можно!Буду очень благодарен!
Nikitos47
UNITрон
 
Сообщения: 256
Зарегистрирован: 03 авг 2013, 21:48

Re: Подвеска машины(амортизаторы)

Сообщение Syberex 31 окт 2016, 22:54

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

/// <summary>
/// If you don’t have a stabilizer bar, you tend to have a lot of trouble with body roll in a turn.
/// http://www.edy.es/dev/2011/10/the-stabi ... -vehicles/
/// </summary>
public class TransmissionAntiRollBar : MonoBehaviour
{
        public WheelCollider WheelL;
        public WheelCollider WheelR;
        public float AntiRoll = 5000f;

        [HideInInspector]
        public Rigidbody rigidbodyCashed;               // Unity 5 Compatible


        void Start()
        {
                rigidbodyCashed = GetComponent<Rigidbody>();
        }
       

        void FixedUpdate()
        {
                WheelHit hit;
                float travelL = 1f;
                float travelR = 1f;
                bool groundedL = WheelL.GetGroundHit(out hit);
                if (groundedL)
                        travelL = (-WheelL.transform.InverseTransformPoint(hit.point).y - WheelL.radius) / WheelL.suspensionDistance;
                bool groundedR = WheelR.GetGroundHit(out hit);
                if (groundedR)
                        travelR = (-WheelR.transform.InverseTransformPoint(hit.point).y - WheelR.radius) / WheelR.suspensionDistance;
                float antiRollForce = (travelL - travelR) * AntiRoll;
                if (groundedL)
                        rigidbodyCashed.AddForceAtPosition(WheelL.transform.up * -antiRollForce, WheelL.transform.position);
                if (groundedR)
                        rigidbodyCashed.AddForceAtPosition(WheelR.transform.up * antiRollForce, WheelR.transform.position);
        }
}
Аватара пользователя
Syberex
Адепт
 
Сообщения: 2292
Зарегистрирован: 14 янв 2011, 20:35
Откуда: Кострома
  • Сайт

Re: Подвеска машины(амортизаторы)

Сообщение Nikitos47 03 ноя 2016, 19:50

Syberex писал(а):
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

/// <summary>
/// If you don’t have a stabilizer bar, you tend to have a lot of trouble with body roll in a turn.
/// http://www.edy.es/dev/2011/10/the-stabi ... -vehicles/
/// </summary>
public class TransmissionAntiRollBar : MonoBehaviour
{
        public WheelCollider WheelL;
        public WheelCollider WheelR;
        public float AntiRoll = 5000f;

        [HideInInspector]
        public Rigidbody rigidbodyCashed;               // Unity 5 Compatible


        void Start()
        {
                rigidbodyCashed = GetComponent<Rigidbody>();
        }
       

        void FixedUpdate()
        {
                WheelHit hit;
                float travelL = 1f;
                float travelR = 1f;
                bool groundedL = WheelL.GetGroundHit(out hit);
                if (groundedL)
                        travelL = (-WheelL.transform.InverseTransformPoint(hit.point).y - WheelL.radius) / WheelL.suspensionDistance;
                bool groundedR = WheelR.GetGroundHit(out hit);
                if (groundedR)
                        travelR = (-WheelR.transform.InverseTransformPoint(hit.point).y - WheelR.radius) / WheelR.suspensionDistance;
                float antiRollForce = (travelL - travelR) * AntiRoll;
                if (groundedL)
                        rigidbodyCashed.AddForceAtPosition(WheelL.transform.up * -antiRollForce, WheelL.transform.position);
                if (groundedR)
                        rigidbodyCashed.AddForceAtPosition(WheelR.transform.up * antiRollForce, WheelR.transform.position);
        }
}

Спасибо большое!Скоро протестирую :-bd
Nikitos47
UNITрон
 
Сообщения: 256
Зарегистрирован: 03 авг 2013, 21:48


Вернуться в PhysX

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

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