Переключение состояний в Unity2D C#
Делаю управление в Unity, идея проста - есть три состояния:
0 - запуск, ничего не происходит
1 - после одного нажатия вперед - постоянно идет вперед
0 - после одного нажатия назад - останавливается
-1 - после еще одного нажатия назад - постоянно идет назад
ну и в обратную сторону тоже самое
проблема в том, что работает либо вперед, либо назад, остановка происходит, но на один раз, а потом сразу переключается на состояние идти вперед или назад В поисках информации в инете наткнулся, что возможно происходит потому что я Update использую, а нужно Event, хотя по моему он мне не подходит, но я не до конца разобрался в нем В общем, help
вот код(уже не первый, раньше пытался через прибавление и отнимание единицы, но фигня, собственно, та же, отсюда и хлам в коде))
'''
void FixedUpdate()
{
MoveLogic();
}
void MoveLogic()
{
if((Input.GetButton("Forward") == true) && fwCase != true && stCase == true && bwCase != true)
{
spCase = 1;
}
if((Input.GetButton("Forward") == true) && fwCase != true && stCase != true && bwCase == true)
{
spCase = 0;
}
if((Input.GetButton("Backward") == true) && bwCase != true && stCase == true && fwCase != true)
{
spCase = -1;
}
if((Input.GetButton("Backward") == true) && bwCase != true && stCase != true && fwCase == true)
{
spCase = 0;
}
switch (spCase)
{
case 1:
fwCase = true;
bwCase = false;
stCase = false;
Debug.Log("1");
break;
case 0:
fwCase = false;
bwCase = false;
stCase = true;
Debug.Log("0");
break;
case -1:
fwCase = false;
bwCase = true;
stCase = false;
Debug.Log("-1");
break;
}
}
'''
Ответы (1 шт):
Чтобы я не делал, как бы я не пытался, но у меня не получалось... но подумая ещё немного я нашёл ответ! Я очень сильно исковеркал Ваш код, но всё же вот что у меня получилось и оно работает! Мне пришлось многое поменять... Надеюсь Вам такой код понравится и он (код) сможет подойти вашей игре. НО важно, чтобы кнопка срабатывала только при нажатии на неё (или тогда, когда игрок перестаёт на неё нажимать), просто если кнопка сможет работать тогда, когда игрок зажимает (нажимает и удерживает) её, то вы врядли увидите состояние "0"
ВАЖНО!!!
Если вы хотите увидеть код, который будет работать для UI (для кнопок на самом экране, то есть не для клавиш клавиатуры), то дайте мне знать комментарием на мой ответ, может я смогу помочь.
private void Start()
{
spCase = 0;
}
void FixedUpdate()
{
if ((Input.GetKeyDown(KeyCode.UpArrow) == true) && spCase == -1)
{
spCase = 0;
}
else
{
if ((Input.GetKeyDown(KeyCode.UpArrow) == true) && spCase == 0)
{
spCase = 1;
}
}
if ((Input.GetKeyDown(KeyCode.DownArrow) == true) && spCase == 1)
{
spCase = 0;
}
else
{
if ((Input.GetKeyDown(KeyCode.DownArrow) == true) && spCase == 0)
{
spCase = -1;
}
}
switch (spCase)
{
case -1:
Debug.Log("-1");
break;
case 0:
Debug.Log("0");
break;
case 1:
Debug.Log("1");
break;
}
}
}