Почему скорость передвижения разная по X и Y , хотя задал одну скорость . Unity

public float speedX = 10.0f, speedY = 10.0f;
public static bool triggerEnter;
float _x, _y;
Rigidbody rb;

// Start is called before the first frame update
void Start()
{
    rb = GetComponent<Rigidbody>();
}





void FixedUpdate()
{

    _x = Input.GetAxis("Horizontal") * Time.fixedDeltaTime * speedX;
    _y = Input.GetAxis("Vertical") * Time.fixedDeltaTime * speedY;
    Vector3 v = new Vector3(_x, _y);

    rb.AddForce(v, ForceMode.Impulse);
    if (!Input.GetKeyUp(KeyCode.UpArrow) || !Input.GetKeyUp(KeyCode.DownArrow))
    {
        rb.velocity = new Vector3(_x, 0, 0);

    }
    if (!Input.GetKeyUp(KeyCode.LeftArrow) || !Input.GetKeyUp(KeyCode.RightArrow))
    {
        rb.velocity = new Vector3(0, _y, 0);
    }




}

Rigidbody объекта


Ответы (1 шт):

Автор решения: animagnoa

в вашем коде каждый кадр выполняются условия:

if (!Input.GetKeyUp(KeyCode.UpArrow) || !Input.GetKeyUp(KeyCode.DownArrow))
{
    rb.velocity = new Vector3(_x, 0, 0);
}

потому, что кнопка всегда отжата (если на нее не нажимают) таким образом, почему по оси Y скорость в 2 раза больше? просто потому, что в FixedUpdate условия "сброса" скорости стоит в конце блока.. если поменять местами условия для оси X вместо Y, то ось икс станет в 2 раза быстрее по скорости

по этому нужно быть, всегда внимательнее в по кадровом выполнении кода, если вы уж решили сбрасывать скорость до нуля таким образом, то в методе FixedUpdate лучше сделать вот так :

void FixedUpdate()
{
    _x = Input.GetAxis("Horizontal") * Time.fixedDeltaTime * speedX;
    _y = Input.GetAxis("Vertical") * Time.fixedDeltaTime * speedY;
    Vector3 v = new Vector3(_x, _y);

    rb.AddForce(v, ForceMode.Impulse);

    if (_x == 0 || _y == 0)
    {
        rb.velocity = Vector3.zero;
    }
    else
    {
        rb.velocity = Vector2.ClampMagnitude(v, 0);
    }
}

есть более рациональные способы, контролировать скорость, почитайте побольше о Rigidbody

вам так же тут понадобиться адекватно ограничить нарастающую скорость по диагонали, я просто привел very simple пример

→ Ссылка