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