В этом уроке мы рассмотрим простые, но довольно полезные функции. На этот раз обойдёмся без определений, и перейдём сразу к функциям в Unity3D.
Квадратный корень и его применение
Извлечь квадратный корень из числа в Unity (C#) можно так:Mathf.Sqrt(float f) //Квадратный корень
Данная функция возвращает арифметический квадратный корень, то есть неотрицательное значение.
В играх его можно применить, например, для определения расстояния до объекта.

Нам известно расстояние от врага до игрока по оси X и Z (или можем узнать).
По теореме Пифагора мы можем найти квадрат гипотенузы, то есть квадрат расстояния от врага до игрока. После чего извлекаем квадратный корень.
Немного кода:
using UnityEngine;
public class DistanceCalc : MonoBehaviour {
//Цель, расстояние до которой надо найти
public Transform target;
// Use this for initialization
void Start ()
{
if(target == null) return;
//Находим расстояние по осям
Vector3 v = target.position - transform.position;
//Ссчитаем квадрат расстояния по оси X
float sqrX = v.x * v.x;
//Считаем квадрат расстояния по оси Z
float sqrZ = v.z * v.z;
//Вычисляем расстояние до цели, извлекая квадратный корень из суммы квадратов расстояний по осям X и Z
float distance = Mathf.Sqrt(sqrX + sqrZ);
Debug.Log(distance);
}
}
Модуль или абсолютное значение
Кто как называет, но смысл от этого не меняется.Абсолютное значение (или модуль) — это значение без учёта знака, то есть абсолютное значение числа 10 и -10 одинаково и равно 10.
Получить абсолютное значение числа в Unity (C#) можно с помощью функции:
Mathf.Abs(float f) //Абсолютное значение (модуль)
Это полезно, когда знак только мешает расчётам.
Например, когда мы считаем скорость. Если объект движется вперед то всё нормально. А если назад? У него выходит отрицательная скорость. Чтобы избавиться от минуса, но не париться с определением направления и знака, можно брать абсолютное значение.
Максимум и минимум.
Не редко бывает, что надо сравнить два числа и использовать из них максимальное или минимальное.В Unity (C#) для получения наибольшего или наименьшего числа из двух чисел, есть функция:
Mathf.Min(float a, float b) //Наименьшее
Mathf.Max(float a, float b) //Наибольшее
Использовать можно, например, в случае со здоровьем игрока.
Чтобы оно не превышало максимальное:
currentHealth = Mathf.Min(curentHealth, maxHealth);
И чтобы было не ниже нуля:
currentHealth = Mathf.Max(currentHealth, 0);
Но бывают ситуации, когда выбрать надо более, чем из двух чисел.
К примеру у торговца хорошее настроение и он готов продать игроку любой товар по минимальной цене. Или наоборот, игрок насолил торговцу, и тот продаёт ему всё по максимальной цене.
Реализовать это в Unity (C#) можно с помощью тех же функций, просто в качестве параметра передать массив значений:
Mathf.Min(float[] array) //Наименьшее
Mathf.Max(float[] array) //Наибольшее
Для приведённых ситуаций это будет выглядеть так:
if(smile)
price = Mathf.Min(priceList);
else if(evil)
price = Mathf.Max(priceList);
На этом и закончим.
P.S. Если что-то не понятно, пишите в комментариях.