Создание платформера на Unity [Часть 2]

1xbet купи билет онлайн 1xbet melbet
Сообщения
845
Реакции
589
Skype
zmey__xd
Доброго времени суток.
Сейчас мы продолжим создание нашего платформера . Речь пойдёт о управление камерой,сбор бонусов и способ умереть в игре.


Для того чтобы камера во время игры не стояла статично,а плавно двигалась за персонажем, используем заранее подготовленный скрипт.Делаем всё, как на гифке.



Сам скрипт очень короткий и выглядит вот так:

Код:
using UnityEngine;
using System.Collections;
public class newcam : MonoBehaviour { public float dampTime = 0.5f; private Vector3 velocity = Vector3.zero; public Transform target; void Update () { if (target) { Vector3 point = camera.WorldToViewportPoint(new Vector3(target.position.x, target.position.y+0.5f,target.position.z)); Vector3 delta = new Vector3(target.position.x, target.position.y+0.5f,target.position.z) - camera.ViewportToWorldPoint(new Vector3(0.f, 0.f, point.z)); //(new Vector3(0.5, 0.5, point.z)); Vector3 destination = transform.position + delta; transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime); } }
}


Main camera, на которую повешен этот скрипт, следует за объектом, который указан у него (скрипта) в публичной переменной target. Все публичные переменные в скриптах можно изменять прямо из редактора Unity. В нашем случае укажем на героя, запустим игру и проверим.



Теперь можно сделать префаб из платформы раскидаем в хаотичном порядке по сцене.
В моем случае, выглядит это примерно так:



Для того что бы герой при прыжке в яму,так сказать умирал,сделаем следующие:
Для этого нам понадобятся пустой объект, которому добавим Box Collider (вытянутый по горизонтали) и поставим на нем в инспекторе галку Is trigger. Триггер в Unity отличается от простого коллайдера тем, что он не является препятствием, но при пересечении с объектом может вызвать какое-то событие. Объект переименуем в dieCollider и напишем немного кода для обработки падения.


Как можно быстрее найдем во вкладке Assets и, после двойного клика, впервые познакомимся с MonoDevelop в рамках этой серии уроков.



Для обработки пересечения с триггером используется функция OnTriggerEnter2D. Для простого коллайдера аналогично OnCollisionEnter2D.
Добавим следующий код:


Код:
void OnTriggerEnter2D(Collider2D col){ if (col.gameObject.name == "dieCollider") Application.LoadLevel (Application.loadedLevel); }

Как видите, все логично. Если имя объекта, с которым мы столкнулись, совпадает со строкой «dieCollider», то перезагружаем уровень — загружаем еще раз уровень, который уже загружен.


Сделаем префаб из dieCollider'а, расставим его копии во всех опасных местах Перейдём к нашим бонусам(Звёздам)



Теперь вернемся в MonoDevelop и напишем немного кода. Объявим float переменную score и добавим следующий код в функцию OnTriggerEnter2D

Код:
if (col.gameObject.name == "star") { score++; Destroy (col.gameObject); }


Он выполняет две простые функции — увеличивает результат на единицу и уничтожает объект, с которым мы столкнулись (в данном случае звезду). Так как из бонуса мы уже сделали префаб, раскидаем немного по уровню и посмотрим что будет, если их собирать. Обратите внимание на переменную score в правом нижнем углу экрана.



Теперь давайте научимся отображать результат на экране, ведь никто не хочет играть в игру прямо в редакторе и смотреть где-то сбоку количество собранных звезд. В этом нам поможет функция OnGUI(), которая прекрасно умеет отрисовывать на экране текстовые блоки, кнопки и прочие полезные вещи.

Код:
void OnGUI(){ GUI.Box (new Rect (0, 0, 100, 100), "Stars: " + score);
}


Рисуется квадрат с координатой левого верхнего угла (0,0) и размерами 100x100. В нем выводится текст, прямо говорящий нам о количестве собранных звездочек.


В этом уроке мы научились собирать бонусы(с выводом статистики в углу экрана),умирать и возрождаться заного.
 
kaspersky keys
Верх