| 
				
				Переключение передач?
				 | 
 | 
| labrob2013 | Дата: Воскресенье, 14 Августа 2016, 19:46 | Сообщение # 1 |  
 
был не раз 
Сейчас нет на сайте 
 
 | Как реализовать переключение передач у машины, может есть примеры кода(Unity 5) ?
  Email: labrob2013@yandex.ru
 |  
| 
 | 
 |    | 
| Alfe | Дата: Воскресенье, 14 Августа 2016, 20:13 | Сообщение # 2 |  
 
старожил 
Сейчас нет на сайте 
 
 | labrob2013, как на счёт примеров желаемого. Или более подробного устного объяснения того, чего нужно достичь?
   Группа нашей команды. Там есть интересная рубрика... иногда игры выходят        Моя первая игpa - Crazy Penguin
 |  
| 
 | 
 |    | 
| labrob2013 | Дата: Воскресенье, 14 Августа 2016, 20:20 | Сообщение # 3 |  
 
был не раз 
Сейчас нет на сайте 
 
 | Нужно сделать переключение передач как в "Need For Speed Underground 1", т.е если с первой передачи переключится на третью будет долго разгонятся машина... Можете видео посмотреть этой игры "Need For Speed Underground 1" драг рейсинг
  Email: labrob2013@yandex.ru
 |  
| 
 | 
 |    | 
| URGINSAN | Дата: Воскресенье, 14 Августа 2016, 21:46 | Сообщение # 4 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | В теории думаю так. Вводим 5 переменных float (5 передач), у них указываем разные, типа "передаточные" числа. Также вводим переменную, на которую будет умножаться скорость при нажатии на газ. Эта переменная будет принимать значения передаточных чисел в зависимости от текущей передачи. Тем самым, чем передача выше, тем труднее набирается скорость. Грубо говоря вот кусочек кода, не проверял, но в теории должно работать.
 Код  public float gear1 = 1; //значение подобрать методом тыка public float gear2 = 0.8f; //значение подобрать методом тыка public float gear3 = 0.6f; //значение подобрать методом тыка public float gear4 = 0.4f; //значение подобрать методом тыка public float gear5 = 0.2f; //значение подобрать методом тыка public float currentGearForce; public int currentGear = 0; //0== нейтралка.
  void Update() {     if (Input.GetKeyDown(Keycode.W) && currentGear != 0){         Умножаем скорость машины на переменную currentGearForce * Time.deltaTime;     }     if (currentGear == 1){         currentGearForce = gear1;     }     if (currentGear == 2){         currentGearForce = gear2;     }     if (currentGear == 3){         currentGearForce = gear3;     }     if (currentGear == 4){         currentGearForce = gear4;     }     if (currentGear == 5){         currentGearForce = gear5;     } }
 
  Потом делаем так, чтобы если тахометр приближается к красной зоне, то передача выше (для автомата)
 
  Для механики соответственно тоже самое, но при нажатии на кнопку.
  Я на драйве
 
 Сообщение отредактировал URGINSAN - Воскресенье, 14 Августа 2016, 21:48  |  
| 
 | 
 |    | 
| Saitei | Дата: Воскресенье, 14 Августа 2016, 22:20 | Сообщение # 5 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата URGINSAN (  )  if (currentGear == 1){         currentGearForce = gear1;     }     if (currentGear == 2){         currentGearForce = gear2;     }     if (currentGear == 3){         currentGearForce = gear3;     }     if (currentGear == 4){         currentGearForce = gear4;     }     if (currentGear == 5){         currentGearForce = gear5;     }  Лучше заменить на else if. Ещё лучше - switch
 |  
| 
 | 
 |    | 
| labrob2013 | Дата: Воскресенье, 14 Августа 2016, 23:25 | Сообщение # 6 |  
 
был не раз 
Сейчас нет на сайте 
 
 | [Edy's vehicle physics] а куда код написать переключение передач (файл...), куда вставлять место ? Добавлено (14 августа 2016, 23:25) --------------------------------------------- куда вписать?
  Код  ...   void Update ()   {    if (spinUpdateRate == UpdateRate.Disabled)    {     foreach (WheelData wd in m_wheelData)     {      UpdateSteering(wd);     }    }    else     if (spinUpdateRate == UpdateRate.OnUpdate || wheelPositionMode == PositionMode.Accurate)    {     bool needDisableColliders =    m_rigidbody.interpolation != RigidbodyInterpolation.None      && wheelPositionMode == PositionMode.Accurate;          if (needDisableColliders)      DisableCollidersRaycast();          foreach (WheelData wd in m_wheelData)     {      UpdateSteering(wd);      UpdateTransform(wd);     }          if (needDisableColliders)      EnableCollidersRaycast();    }        // Drag state is smoothly faded to zero. It gets raised/modified from the drag contacts.        if (processContacts)    {     UpdateDragState(Vector3.zero, Vector3.zero, m_localDragHardness);     // debugText = string.Format("Drag Pos: {0}  Drag Velocity: {1,5:0.00}  Drag Friction: {2,4:0.00}", localDragPosition, localDragVelocity.magnitude, localDragFriction);    }   }         void FixedUpdate ()   {    // Ensure input values within range        throttleInput = Mathf.Clamp (throttleInput, -1.0f, +1.0f);    brakeInput = Mathf.Clamp01(brakeInput);    handbrakeInput = Mathf.Clamp01(handbrakeInput);        // Update common variables        m_speed = Vector3.Dot(m_rigidbody.velocity, m_transform.forward);    m_speedAngle = Vector3.Angle(m_rigidbody.velocity, m_transform.forward) * Mathf.Sign(m_speed);        // Prepare common data        float referenceDownforce =     computeExtendedTireData? (m_rigidbody.mass * Physics.gravity.magnitude) / m_wheelData.Length : 1.0f;        // Apply wheel physics        bool needUpdateVisuals =     spinUpdateRate == UpdateRate.OnFixedUpdate && wheelPositionMode == PositionMode.Fast;        int groundedWheels = 0;        foreach (WheelData wd in m_wheelData)    {     if (!disallowRuntimeChanges)      UpdateWheelCollider(wd.collider);          if (needUpdateVisuals)      UpdateSteering(wd);          UpdateSuspension(wd);     UpdateLocalFrame(wd);     UpdateGroundMaterial(wd);          ComputeTireForces(wd);     ApplyTireForces(wd);          UpdateWheelSleep(wd);          // Update visual wheel object          if (needUpdateVisuals)      UpdateTransform(wd);          if (wd.grounded) groundedWheels++;          // Calculate extended tire data          if (computeExtendedTireData)      ComputeExtendedTireData(wd, referenceDownforce);    }        // Apply aerodynamic properties        float sqrVelocity = m_rigidbody.velocity.sqrMagnitude;        Vector3 dragForce = -aeroDrag * sqrVelocity * m_rigidbody.velocity.normalized;    Vector3 loadForce = -aeroDownforce * sqrVelocity * m_transform.up;    Vector3 aeroAppPoint = m_transform.position + m_transform.forward * aeroAppPointOffset;        m_rigidbody.AddForceAtPosition(dragForce, aeroAppPoint);    if (groundedWheels > 0) m_rigidbody.AddForceAtPosition(loadForce, aeroAppPoint);        // debugText = string.Format("AeroDrag: {0,6:0.} AeroForce: {1,6:0.}", dragForce.magnitude, loadForce.magnitude);        // Handle impacts        if (processContacts)     HandleImpacts();   } ...
 
  ?
  Email: labrob2013@yandex.ru
 
 Сообщение отредактировал labrob2013 - Воскресенье, 14 Августа 2016, 22:55  |  
| 
 | 
 |    | 
| URGINSAN | Дата: Воскресенье, 14 Августа 2016, 23:36 | Сообщение # 7 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | Цитата Saitei (  )  Лучше заменить на else if. Ещё лучше - switch  Начинающему думаю так понятней будет.
 
 Цитата labrob2013 (  )   а куда код написать переключение передач (файл...), куда вставлять место ?  Если возникают такие вопросы, лучше бросить затею с переключениями передач.  Я написал примерный код, если у тебя еще отсутствует внутрикодовое мышление, лучше изучить сначала основы. Потому что дальше будет только хуже и сложнее, будешь по каждому поводу на форуме спрашивать?
  Я на драйве
 |  
| 
 | 
 |    | 
| labrob2013 | Дата: Понедельник, 15 Августа 2016, 19:21 | Сообщение # 8 |  
 
был не раз 
Сейчас нет на сайте 
 
 | https://vk.com/doc223105033_437768010 Помогите разобраться в этом файле где ГАЗ и где нужно менять скорость ?Добавлено (15 августа 2016, 16:16) --------------------------------------------- помогите пожалуйста Добавлено (15 августа 2016, 19:21) --------------------------------------------- куда вставить код в файл? 
 |  
| 
 | 
 |    | 
| Car3man | Дата: Понедельник, 15 Августа 2016, 23:19 | Сообщение # 9 |  
| 
 был не раз 
Сейчас нет на сайте 
 
 | labrob2013, основы сначала изучи
 
 Сообщение отредактировал Car3man - Понедельник, 15 Августа 2016, 23:20  |  
| 
 | 
 |    | 
| labrob2013 | Дата: Вторник, 16 Августа 2016, 23:48 | Сообщение # 10 |  
 
был не раз 
Сейчас нет на сайте 
 
 | я знаю уже давно изучил основы, только что то я не могу найти куда вставлять помогите Добавлено (16 августа 2016, 23:48) --------------------------------------------- а какие могут ещё быть варианты, как у игры (Need For Speed Underground 1). примерно:   0 - 10  10 - 40  40 -80  80 - 120 120 -180 180 -250 ? 
  Email: labrob2013@yandex.ru
 |  
| 
 | 
 |    | 
| URGINSAN | Дата: Пятница, 19 Августа 2016, 19:26 | Сообщение # 11 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | Цитата labrob2013 (  )  я знаю уже давно изучил основы  :facepalm:  Дык, если после "изучил основы" возникают такие вопросы, то вряд ли ты "изучил основы".
  Я на драйве
 |  
| 
 | 
 |    | 
| Alfe | Дата: Пятница, 19 Августа 2016, 19:54 | Сообщение # 12 |  
 
старожил 
Сейчас нет на сайте 
 
 | labrob2013, вставлять в скрипт. Как скрипты создавать знаем)?
   Группа нашей команды. Там есть интересная рубрика... иногда игры выходят        Моя первая игpa - Crazy Penguin
 |  
| 
 | 
 |    |