переворачивается машина что делать ?[Решено]

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

переворачивается машина что делать ?[Решено]

Сообщение lekan55 24 сен 2012, 00:16

Всем привет и снова я) у меня такой вопрос когда поворачиваю колеса при средней скорости машина переворачивается что делать ?) :-B
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class CarController : MonoBehaviour
{
    public WheelCollider[] WColForward; // масив с передними <span class="posthilit">колеса</span>ми
    public WheelCollider[] WColBack; // масив с задними <span class="posthilit">колеса</span>ми

    public Transform[] wheelF;
    public Transform[] wheelB;

    public float wheelOfSet= 0.1f;
    public float wheelRadius = 0.13f;

    public float maxSteer = 30; // макисмальный угол поворота колес
    public float maxAccel = 25; // максимальный крутящий момент
    public float maxBrake = 50; // максимальный тормозной момент

    public class WheelData
    {
        public Transform wheelTransform;
        public WheelCollider col;
        public Vector3 wheelStartPos;
        public float rotation = 0.0f;
    }

    protected WheelData[] wheels;

    public Transform COM; // центр тяжести

        void Start ()
    {
        rigidbody.centerOfMass = COM.localPosition; // устанавливаем центр массы

         wheels = new WheelData[WColForward.Length+WColBack.Length];

         for (int i = 0; i < WColForward.Length; i++)
         {
             wheels[i] = SetupWheels(wheelF[i], WColForward[i]);
         }
         for (int i = 0; i < WColBack.Length; i++)
         {
             wheels[i + WColForward.Length] = SetupWheels(wheelB[i],WColBack[i]);
         }

        }

    private WheelData SetupWheels(Transform wheel, WheelCollider col)
    {
        WheelData result = new WheelData();

        result.wheelTransform = wheel;
        result.col = col;
        result.wheelStartPos = wheel.transform.localPosition;

        return result;
    }


    void FixedUpdate()
    {
        float accel = 0; // крутящий момент
        float steer = 0; // угол поворота

        accel = Input.GetAxis("Vertical"); // контролируем крутящий момент
        steer = Input.GetAxis("Horizontal"); // контролируем угол поворота

        CarMove(accel, steer); // передаем значение функции CarMove()

        UpdateWheels();
    }

    private void UpdateWheels()
    { //11
        float delta = Time.fixedDeltaTime; //12


        foreach (WheelData w in wheels)
        { //13
            WheelHit hit; //14

            Vector3 lp = w.wheelTransform.localPosition; //15
            if (w.col.GetGroundHit(out hit))
            { //16
                lp.y -= Vector3.Dot(w.wheelTransform.position - hit.point, transform.up) - wheelRadius; //17
            }
            else
            { //18

                lp.y = w.wheelStartPos.y - wheelOfSet; //18
            }
            w.wheelTransform.localPosition = lp; //19


            w.rotation = Mathf.Repeat(w.rotation + delta * w.col.rpm * 360.0f / 60.0f, 360.0f); //20
            w.wheelTransform.localRotation = Quaternion.Euler(w.rotation, w.col.steerAngle, 0f); //21
        }

    }


    private void CarMove(float accel, float steer) // принимаем значение кртящего момента и и поворота
    {


        foreach (WheelCollider col in WColForward) // перебираем все <span class="posthilit">колеса</span>
        {
            col.steerAngle = steer*maxSteer ; // поворачиваем колесо с полученными данными по оси ( контролер юзера )
        }


        if (accel == 0) // если крутящий момент равен нулю тоесть мы не давим на газ
        {
            foreach (WheelCollider col in WColBack) // перебираем <span class="posthilit">колеса</span>
            {
                col.brakeTorque = maxBrake; // передаем значение силы торможение
            }
        }
        else // если пользователь давит на клавиши
        {
            foreach (WheelCollider col in WColBack) // перебираем <span class="posthilit">колеса</span>
            {
                col.brakeTorque = 0; // силу торможения ставим по нулям
                col.motorTorque = accel * maxAccel; // увеличиваем крутящий момент
            }
        }
    }
}

все делал в точ-точ по этому сайту http://habrahabr.ru/post/115557/
Последний раз редактировалось lekan55 26 сен 2012, 20:26, всего редактировалось 1 раз.
lekan55
UNец
 
Сообщения: 27
Зарегистрирован: 07 сен 2012, 21:38

Re: переворачивается машина что делать ?

Сообщение Kayler 24 сен 2012, 01:39

lekan55 писал(а):Всем привет и снова я) у меня такой вопрос когда поворачиваю колеса при средней скорости машина переворачивается что делать ?) :-B

все делал в точ-точ по этому сайту http://habrahabr.ru/post/115557/


настроить центр тяжести правильно, или покувырять управление потому что она у тебя резко поворочивает, любмая реальная машина если на такой скорости повернуть так резко она перевернется
Аватара пользователя
Kayler
Адепт
 
Сообщения: 1038
Зарегистрирован: 25 авг 2010, 23:49
Откуда: Чувашия

Re: переворачивается машина что делать ?

Сообщение lekan55 24 сен 2012, 01:41

Щас попробую
lekan55
UNец
 
Сообщения: 27
Зарегистрирован: 07 сен 2012, 21:38

Re: переворачивается машина что делать ?

Сообщение lekan55 24 сен 2012, 01:47

lekan55 писал(а):Щас попробую

Сделал но токо теперь машину дергает
lekan55
UNец
 
Сообщения: 27
Зарегистрирован: 07 сен 2012, 21:38

Re: переворачивается машина что делать ?

Сообщение star28 22 июн 2013, 18:30

lekan55 писал(а):
lekan55 писал(а):Щас попробую

Сделал но токо теперь машину дергает


Поделитесь как, если не секрет :)
star28
UNец
 
Сообщения: 5
Зарегистрирован: 20 фев 2013, 19:42

Re: переворачивается машина что делать ?[Решено]

Сообщение ASD 24 июн 2013, 08:12

В идеале надо не только центр масс сместить вниз, а и настроить правильно трение WheelCollider'ов. Но если хотите добиться более-менее реалистичного управления - этого тоже будет мало, надо применять динамическое изменение таких характеристик как трение и угол поворота колёс в зависимости от скорости (в т.ч. и "боковой"). Ну и плюс сразу ставьте реалистичные параметры масс и размеров колёс и прочих объектов, это ОЧЕНЬ поможет в дальнейшем
SmartMove Games
ASD
UNIверсал
 
Сообщения: 400
Зарегистрирован: 14 дек 2012, 23:40
Откуда: Харьков
  • ICQ


Вернуться в Почемучка

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

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