avatar

[Unity4] Система паузы.

опубликовал в Unity3D
Что же мы хотим добиться? Может создания паузы? Именно, мы хотим сделать умную паузу. Умную? Да, умная пауза — отключение всех звуков или пауза их, а также установка остановки времени путем нажатия на одну из клавиш, а также снятие с паузы.

Шаг первый.

  1. Создаем переменные
Нам понадобится одна локальная bool переменная для проверки активности паузы игрового процесса, локальная переменная с контроллером игрока для проверки нахождения игрока на земле, мы же не хотим игру ставить на паузу… Далее нам понадобится публичный массив всех звуков:
bool IsPause = false;
CharacterController controller;
public AudioSource[] AOAS;

Отлично, первый шаг мы выполнили, теперь будем начинать создавать второй…

Шаг второй.

При инициализации игры мы должны получить компонент на объекте. Что за компонент? Контроллер игрока, конечно же:
void Start() {
	controller = transform.GetComponent<CharacterController>();
}

Теперь мы приступаем к самому трудному шагу.

Шаг третий.

Ну вот мы и пришли к великой и могучей функции Update (). В ней мы пропишем основную систему паузы. Начнем с простого — сделаем условие нажатия на клавишу и проверку на приземленность игрока, то есть на земле ли игрок:
if(Input.GetKeyDown(KeyCode.P) && IsPause == false && controller.isGrounded) {

}

В самом условии мы получим звуки и с помощью цикла поставим их на паузу, а также поставим время игры на 0, то есть остановим:
AOAS = FindObjectsOfType(typeof(AudioSource)) as AudioSource[];
Time.timeScale = 0;
	for (int i = 0; i < AOAS.Length; i++) {
		AOAS[i].Pause();
	}
IsPause = true;

Теперь мы создали паузу, давайте распишу вам все подробнее:
  1. Сначала мы ищем все объекты, имеющие компонент звука, то есть AudioSource — AOAS = FindObjectsOfType(typeof(AudioSource)) as AudioSource[];
  2. Потом остановили время — Time.timeScale = 0;
  3. Цикл подсчета всех объект и пауза всех звуков в одном из последних шагов был реализован — for (int i = 0; i < AOAS.Length; i++) {
    AOAS[i].Pause();
    }
  4. И говорим нашей системе, что пауза включена заключающей строкой — IsPause = true;
Вроде понятно объяснил… Теперь давайте создадим противоположное условие в else. Я не буду уже так расписывать, потому что мы делаем все тоже самое, только ставим время на 1, то есть запускаем, а звуки воспроизводим, то есть Play:
else {
	if(Input.GetKeyDown(KeyCode.P) && IsPause == true) {
		Time.timeScale = 1;				
			for (int i = 0; i < AOAS.Length; i++) {
				AOAS[i].Play();
			}				
		IsPause = false;
	}				
}

Ну вот и подошел этот урок к концу, спасибо всем вам за внимание, с вами был mepihin, Максим Епихин.

2 комментария

avatar
В Unity 5.3 лучше применять UnPause () вместо Play ().
avatar
И спасибо за статью!
Чтобы оставить комментарий необходимо .