Цикл 1
В Unity, в классе Mathf одним из циклов является Repeat.Синтаксис (C#):
Mathf.Repeat(float val, float length);
Результат работы данной функции находиться между 0 и length. По сути данная функция возвращает остаток от деления значение val на length. Поэтому при постоянном увеличении/уменьшении значения val происходит зацикленность.
Как применить?
Применить данную функцию можно для моделирования любого процесса в одном цикле которого нет повторяющихся значений. Например, вращение Земли вокруг своей оси.
Но мы вращать пока ничего не будем, а создадим «декоративный конвейер»:

Шар будет передвигаться из точки А в точку Б, после достижения точки Б процесс начнётся заново. Будет эффект работы конвейера, но сфера будет одна.
Скрипт для сферы:
using UnityEngine;
public class RepeatPos : MonoBehaviour {
// Update is called once per frame
void Update ()
{
//5 — это расстояние от пункта А до пункта Б
transform.position = new Vector3(Mathf.Repeat(Time.time, 5), transform.position.y, transform.position.z);
}
}
Цикл 2
Очередной цикл в Unity (C#):Mathf.PingPong(float val, float length)
Данная функция как и предыдущая возвращает значение в диапазоне от 0 до length.
Подходит для маятника или дворника на автомобиле.
Код (C#):
using UnityEngine;
public class PingPongAngle : MonoBehaviour {
// Update is called once per frame
void Update ()
{
//Домножил на 50 для скорости
transform.eulerAngles = new Vector3(0, 0, Mathf.PingPong(Time.time*50, 120));
}
}
Думаю всем понятно как это работает и подробных объяснений не требуется =)
Инверсная интерполяция
Синтаксис (C#):Mathf.InverseLerp (float from, float to, float val)
Вычисляет параметр функции Lerp на основе двух других параметров и результата функции.
Возвращает значение в диапазоне от 0 до 1.
Применить можно для отображения жизней игрока в процентах:
using UnityEngine;
public class HealthPlayer : MonoBehaviour {
public float maxHealth = 200;
public float currentHealth = 70;
// Update is called once per frame
void OnGUI ()
{
GUI.Label(new Rect(10, 10, 100, 50), Mathf.InverseLerp(0, maxHealth, currentHealth)*100 + "%");
}
}
На этом всё.
P.S. Если что-то не понятно, пишите в комментариях.