Вы должны убедиться, что вы увеличиваете / уменьшаете 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.