Вы оцениваете свой вклад в каждом случае коммутатора, а не перед тем, как оценивать коммутатор.Вы также проверяете ввод и затем его отсутствие, поэтому просто используйте else
для очистки этих проверок.Вы также ничего не делаете, кроме vy = 0
, поэтому не беспокойтесь о том, чтобы установить:
if (Input.GetKey (KeyCode.A))
state = "left";
else if (Input.GetKey (KeyCode.D)) // if you hold both A and D, A will get priority
state = "right";
else
state = "idle";
switch(state)
{
case("idle")
vx = 0;
break;
case("left")
vx = playerSpeed;
break;
case("right")
vx = -1 * playerSpeed;
break;
}
Вы также не добавляете значения в позицию преобразования должным образом, вы просто добавляете ихк вашей временной переменной pos
(переменная, которая вам вообще не нужна):
vx += pos.x;
vy += pos.y;
pos += transform.position;
вместо этого должно быть:
transform.position.Translate(vx, vy, 0);
Мне бы тоже хотелосьуказать, что сам переключатель совершенно бессмыслен, но я сделал это своим ответом, чтобы было ясно, что делается неправильно;вам просто нужно установить значения vx
в операторах if
/ else if
/ else
.