Почему колесо прокрутки работает только в альтернативном случае - PullRequest
2 голосов
/ 09 января 2020

У меня есть набор оружия, которое я пытаюсь перебрать, используя колесо прокрутки. У меня есть код, но он будет прокручивать только от самого низкого индекса до самого высокого индекса за один ход (переполнение), но он не будет go один за другим, считая по массиву. Вот мой код

void Update()
{
    var d = Input.GetAxis("Mouse ScrollWheel");     //ScrollWheel Input
    if (d > 0f)
    {
        activeWeaponIndex = (activeWeaponIndex + 1 < weapons.Length) ? activeWeaponIndex++ : activeWeaponIndex = 0; //Increment index, if at max set to 0
    }
    else if (d < 0f)
    {
        activeWeaponIndex = (activeWeaponIndex - 1 >= 0) ? activeWeaponIndex-- : activeWeaponIndex = 3; //Increment index unless it is at min then set to 3(4th wep)
    }

    Swap(activeWeaponIndex);        //Switch Weapon
}

1 Ответ

0 голосов
/ 09 января 2020

Вы должны убедиться, что вы увеличиваете / уменьшаете activeWeaponIndex, прежде чем присваивать значение. Как правило, выполнение x = x++ не изменит значение x. И вы неправильно используете троичный оператор. Это должно быть:

x = (conditional) ? value1 : value2

Вы делаете:

x = (conditional) ? value1 : statement1

Однако вы спасены тем фактом, что оператор присваивания возвращает значение стороны rgiht.

Вы можете изменить свой код на это:

void Update()
{
    var d = Input.GetAxis("Mouse ScrollWheel");     //ScrollWheel Input
    if (d > 0f)
    {
        activeWeaponIndex = (activeWeaponIndex + 1 < weapons.Length) ? ++activeWeaponIndex : 0; //Increment index, if at max set to 0
    }
    else if (d < 0f)
    {
        activeWeaponIndex = (activeWeaponIndex - 1 >= 0) ? --activeWeaponIndex : 3; //Decrement index unless it is at min then set to 3(4th wep)
    }

    Swap(activeWeaponIndex);        //Switch Weapon
}

Редактировать: После хорошего комментария Draco18snolongertrustsSE здесь есть другая версия:

void Update()
{
    var d = Input.GetAxis("Mouse ScrollWheel");     //ScrollWheel Input
    if (d==0)
    {
        return;
    } 
    activeWeaponIndex = (d > 0f) ? 
        activeWeaponIndex = (activeWeaponIndex + 1) % weapons.Length :
        activeWeaponIndex + (weapons.Length-1) % weapons.Length;

    Swap(activeWeaponIndex);        //Switch Weapon
}

Это также избегает смены оружия, если d равно 0.

...