Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2023, 23:27   #1
popilpup
Новичок
Джуниор
 
Регистрация: 06.03.2023
Сообщений: 1
Вопрос МКПП на WheelCollider юнити

хочу сделать машину на юнити, использую WheelCollider.
Как сделать что бы при повышении передачи изменялся не мощность мотора а передаточное число?
в оф. документациях толкогого ничего не нашёл
popilpup вне форума Ответить с цитированием
Старый 08.03.2023, 16:12   #2
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Не понимаю суть вопроса, даже кода своего не предоставили
Lapita12 вне форума Ответить с цитированием
Старый 09.03.2023, 14:23   #3
Lapita12
Новичок
Джуниор
 
Регистрация: 08.03.2023
Сообщений: 24
По умолчанию

Код:
csharp
using UnityEngine;

public class Gearbox : MonoBehaviour
{
    public WheelCollider wheelFL;
    public WheelCollider wheelFR;
    public WheelCollider wheelRL;
    public WheelCollider wheelRR;

    public int currentGear = 1;
    public float[] gearRatios;

    private float engineTorque = 1500f;
    private float maxSpeed = 200f;

    private void Start()
    {
        wheelFL.ConfigureVehicleSubsteps(5, 12, 15);
        wheelFR.ConfigureVehicleSubsteps(5, 12, 15);
        wheelRL.ConfigureVehicleSubsteps(5, 12, 15);
        wheelRR.ConfigureVehicleSubsteps(5, 12, 15);
    }

    private void FixedUpdate()
    {
        float motorTorque = engineTorque * Input.GetAxis("Vertical");
        float currentSpeed = wheelFL.radius * wheelFL.rpm * Mathf.PI * 0.12f;

        if (currentGear > 0 && currentGear <= gearRatios.Length)
        {
            wheelFL.motorTorque = motorTorque * gearRatios[currentGear - 1];
            wheelFR.motorTorque = motorTorque * gearRatios[currentGear - 1];
            wheelRL.motorTorque = motorTorque * gearRatios[currentGear - 1];
            wheelRR.motorTorque = motorTorque * gearRatios[currentGear - 1];

            if (currentSpeed >= maxSpeed)
            {
                currentGear++;
            }
        }
        else if (currentGear == 0)
        {
            currentGear = 1;
        }
    }

    public void ShiftUp()
    {
        if (currentGear < gearRatios.Length)
        {
            currentGear++;
        }
    }

    public void ShiftDown()
    {
        if (currentGear > 1)
        {
            currentGear--;
        }
    }
}

В этом примере используется массив `gearRatios`, где каждый элемент представляет передаточное число для каждой передачи. При изменении передачи, используйте методы `ShiftUp()` и `ShiftDown()`, которые изменяют значение переменной `currentGear`. Затем в методе `FixedUpdate()` применяется соответствующее передаточное число для текущей передачи.

Обратите внимание, что в этом примере мощность двигателя остаётся постоянной, а передаточное число изменяется. Если вам нужно изменять и мощность двигателя, то вам нужно будет рассчитать исходя из передаточного числа и текущей передачи.
Lapita12 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не понимаю в чем проблема С# для юнити AmsterGo Общие вопросы по программированию, компьютерный форум 1 26.02.2023 14:54
как добавить рекламу юнити адс в приложение на юнити для андроида? _Михаил_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 14 29.03.2021 22:54
онлайн игры для заработка денег (и вопросы про юнити) _Михаил_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 227 09.11.2019 14:28
почему вылетает юнити? realLarkin Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 29.10.2019 07:40