как запретить двигаться в одну сторону во время передвижения
Здраствуйте) Нужно запретить игроку двигаться в одну сторону во время передвижения в другую. Вот код:
void Update()
{
float h = 0f;
yPos = 0;
if (Input.GetKeyDown (KeyCode.W))
{
h = 1;
zPos = h * speed * -1;
model.transform.eulerAngles = new Vector3(0, 0, 0);
}
else if (Input.GetKeyDown(KeyCode.S))
{
h = 1;
zPos = h * speed;
model.transform.eulerAngles = new Vector3(0, 180, 0);
}
else if (Input.GetKeyDown(KeyCode.D))
{
h = 1;
xPos = h * speed * -1;
model.transform.eulerAngles = new Vector3(0, 90, 0);
}
else if (Input.GetKeyDown(KeyCode.A))
{
h = 1;
xPos = h * speed;
model.transform.eulerAngles = new Vector3(0, -90, 0);
}
else if (Input.GetKeyUp(KeyCode.W))
{
h = 0;
zPos = h * speed;
}
else if (Input.GetKeyUp(KeyCode.S))
{
h = 0;
zPos = h * speed;
}
if (Input.GetKeyUp(KeyCode.D))
{
h = 0;
xPos = 0;
}
else if (Input.GetKeyUp(KeyCode.A))
{
h = 0;
xPos = 0;
}
obj.transform.Translate(new Vector3(Time.deltaTime * xPos, Time.deltaTime * yPos, Time.deltaTime * zPos));
}
Пробовал сделать так:
float h = 0f;
float n = 0f;
yPos = 0;
switch (State)
{
case "Idle":
h = 0;
n = 0;
zPos = 0;
xPos = 0;
yPos = 0;
break;
case "W":
n = -1;
h = 0;
zPos = n * speed;
model.transform.eulerAngles = new Vector3(0, 0, 0);
break;
case "A":
n = 0;
h = 1;
xPos = h * speed;
model.transform.eulerAngles = new Vector3(0, -90, 0);
break;
case "S":
n = 0;
h = 1;
zPos = h * speed;
model.transform.eulerAngles = new Vector3(0, 180, 0);
break;
case "D":
n = 0;
h = -1;
xPos = h * speed;
model.transform.eulerAngles = new Vector3(0, 90, 0);
break;
case "Space":
break;
}
if (Input.GetKeyDown (KeyCode.W))
{
State = "W";
}
else if (Input.GetKeyDown(KeyCode.S))
{
State = "S";
}
else if (Input.GetKeyDown(KeyCode.D))
{
State = "D";
}
else if (Input.GetKeyDown(KeyCode.A))
{
State = "A";
}
else if (Input.GetKeyUp(KeyCode.W) ^ Input.GetKeyUp(KeyCode.A) ^ Input.GetKeyUp(KeyCode.S) ^ Input.GetKeyUp(KeyCode.D))
{
State = "Idle";
}
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
fizic.AddForce(Vector3.up * jump);
}
Debug.Log(n.ToString() + " " + h.ToString());
obj.transform.Translate(new Vector3(Time.deltaTime * xPos, Time.deltaTime * yPos, Time.deltaTime * zPos));
}
Но почему то не работает, а логи выводят всё правильно
Ответы (1 шт):
Автор решения: ZZZ
→ Ссылка
Один из вариантов
private float Axis(KeyCode PositiveButton, KeyCode NegativeButton, int Positive, int Negative)
{
if (Input.GetKey(PositiveButton) && Input.GetKey(NegativeButton))
//Что будет происходить если мы нажимаем две разные кнопки
else if (Input.GetKey(PositiveButton))
return Positive;
else if (Input.GetKey(NegativeButton))
return Negative;
//Тут пишешь что будет происходить когда ничего не нажато
}
Затем когда хочешь задать угол то пишешь
model.transform.eulerAngles = new Vector3(0, Axis(KeyCode.W, KeyCode.S, 0, 180), 0);
//Первые это две кнопки на которые нужно будет нажимать, а два последних значения это градусы