Я пытаюсь воссоздать «Горизонтальные» и «Вертикальные» оси по умолчанию, которые можно найти в единстве.
Причина, по которой я это делаю, заключается в том, что я делаю движение, используя значения X и Y вектора2 для горизонтального и вертикального движения, и я хочу иметь возможность перепривязывать ключи для движения во время выполнения.
Оси в единстве не могут быть изменены во время выполнения.
Вот что я сделал
public class HorzontalVerticalVelocity : MonoBehaviour
{
public float horizontalVelocity;
public float verticalVelocity;
private void Update()
{
#region Horizontal
if (Input.GetKey(GameManager.GM.right))
{
if (horizontalVelocity > 1) // Precausion to stop velocity going outside bounds.
{
horizontalVelocity = 1;
return;
}
horizontalVelocity += 0.1f;
}
else if(Input.GetKey(GameManager.GM.left))
{
if (horizontalVelocity < -1)
{
horizontalVelocity = -1;
return;
}
horizontalVelocity -= 0.1f;
}
else // Reset to zero when no input is recieved.
{
if (horizontalVelocity == 0)
return; // dont run the code if we are stationary!
horizontalVelocity = Mathf.Lerp(horizontalVelocity, 0, 1f);
}
#endregion
#region Vertical
if (Input.GetKey(GameManager.GM.up))
{
verticalVelocity += 0.1f;
}
else if (Input.GetKey(GameManager.GM.down))
{
verticalVelocity -= 0.1f;
}
else // Reset to zero when no input is recieved.
{
if (verticalVelocity == 0)
return; // dont run the code if we are stationary!
verticalVelocity = Mathf.Lerp(verticalVelocity, 0, 1f);
}
#endregion
// Clamp velocity to a reasonable limit.
horizontalVelocity = Mathf.Clamp(horizontalVelocity, -1, 1);
verticalVelocity = Mathf.Clamp(verticalVelocity, -1, 1);
}
}
У меня есть концепция вниз для оси, значение устанавливается и возвращается к нулю, когда нет ввода.
Однако я заметил несколько проблем
Главным из них является то, что он чрезвычайно неуклюж по сравнению с использованием единой горизонтальной оси для движения.
Любой совет, как я могу сделать это наравне с этим? или я должен просто переделать способ, которым я добавляю скорость персонажу в этот момент.