Бывают ситуации, когда важен знак числа, а само число не играет никакой роли или вообще мешает.
Для таких случаев в Unity есть специальная функция:
Mathf.Sign(float f) //Знак числа
Данная функция возвращает 1, если число не отрицательное (больше или равно нуля). И -1, если отрицательное (меньше нуля).
Применение
Получение знака может пригодиться например, когда нам надо вращать объект с определённой скоростью при нажатии клавиш.Для этого можно использовать такой код:
using UnityEngine;
public class RotSign : MonoBehaviour {
// Update is called once per frame
void Update ()
{
//Если нажата клавиша "влево" или "вправо" (чтобы исключить ноль)
if(Input.GetButton("Horizontal"))
{
//Поворот со скоростью 90/-90 градусов в секунду
transform.Rotate(Vector3.up * Mathf.Sign(Input.GetAxis("Horizontal")) * 90 * Time.deltaTime);
}
}
}
Объект будет поворачивать на 90 градусов в секунду, если нажата клавиша «вправо», и на -90, если клавиша «влево».
Если же опустить получение знака, то скорость поворота будет меньше 90 градусов в секунду. При нажатии кнопки «ось» увеличивается/уменьшается до 1/-1 не резко, а плавно, поэтому значение будет не ровным и скорость вращения не постоянной.
Ограничители (диапазоны)
В Unity есть функция ограничения значения, то есть заключение его в определённый диапазон:Mathf.Clamp(flaot f, float min, float max) //Ограничение
Mathf.Clamp01(float f) //Ограничение от 0 до 1
Первая функция возвращает min, если f меньше min. Если f больше max, то возвращает max. Иначе возвращает f.
Данную функцию удобно использовать, например, со здоровьем:
Как видим, код короче, чем с функциями Min и Max.
Другой пример, ограничение перемещения камеры, чтобы она не выходила за пределы "мира" в стратегии:
// Update is called once per frame
void Update ()
{
//Позиция по оси X в диапазоне от -500 до 500
float _x = Mathf.Clamp(transform.position.x + Input.GetAxis("Horizontal") * 10 * Time.deltaTime, -500, 500);
//Позиция по оси Z в диапазоне от -500 до 500
float _z = Mathf.Clamp(transform.position.z + Input.GetAxis("Vertical") * 10 * Time.deltaTime, -500, 500);
//Установка новой позиции
transform.position = new Vector3(_x, transform.position.y, _z);
}
Вторая функция делает тоже самое, что и первая, но её min и max соответственно 0 и 1.
Эту функцию можно использовать, например, для ограничения процентов:
percent = Mathf.Clamp01(num) * 100;
На этом всё.
P.S. Если что-то не понятно, пишите в комментариях.