Переключение передач?
|
|
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
|
|
| |