Как с Vector3.Max и Vector3.Min?
public Vector3 Max;
public Vector3 Min;
void FixedUpdate()
{
Vector3 desiredPosition;
if (Input.GetKeyDown(KeyCode.UpArrow))
{
desiredPosition = transform.position + transform.up;
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
desiredPosition = transform.position + transform.up * -1;
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
desiredPosition = transform.position + transform.right * -1;
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
desiredPosition = transform.position + transform.right;
}
desiredPosition = Vector3.Min(desiredPosition, this.Max);
desiredPosition = Vector3.Max(desiredPosition, this.Min);
rb.MovePosition(desiredPosition);
}
В этом примере обязательно установите Min и Max в инспекторе.
Обратите внимание, что мы передаем Max в функцию Min и Min в функцию Max.Это потому, что Vector3.Min возвращает меньшие компоненты двух векторов, которые вы передаете в него.Когда ваша позиция превышает максимум, мы хотим вернуть позицию, потому что она меньше из двух.Когда позиция меньше максимальной, мы хотим вместо нее позицию (опять же, меньшее из двух).Обратное верно для Vector3.Max.