Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы и ответы к экзамену.docx
Скачиваний:
29
Добавлен:
21.06.2022
Размер:
16.83 Mб
Скачать

28. Игра в стиле jetpack joyride в Unity 2d. Передвижение мыши вперед (скрипт). Создание бесконечного уровня в Unity: создание префаба, генератор комнат (скрипт).

Передвижение мыши вперед (скрипт)

Для того, чтобы мышь полетела в другой конец комнаты, вам нужно будет сделать две вещи:

  • Сделать чтобы мышь и в самом деле двигалась.

  • Заставить камеру двигаться вслед за мышью.

Для решения этих задач потребуется совсем немного кода. Начнем. Откройте скрипт MouseController и добавьте после публичной переменной:

public float forwardMovementSpeed = 3.0f;

Эта переменная будет определять насколько быстро наша мышь движется вперед.

После этого добавьте следующий код в конце FixedUpdate:

Vector2 newVelocity = rigidbody2D.velocity;

newVelocity.x = forwardMovementSpeed;

rigidbody2D.velocity = newVelocit

Создайте новый C# Script по имени CameraFollow. Перетащите его над Main Camera в Иерархию, чтобы добавить в качестве компонента. Откройте скрипт CameraFollow в MonoDevelop и добавьте следующий публичную переменную:

public GameObject targetObject;

Добавьте следующий код в Update:

float targetObjectX = targetObject.transform.position.x;

Vector3 newCameraPosition = transform.position;

newCameraPosition.x = targetObjectX;

transform.position = newCameraPosition;

Этот код просто берет координату Х целевого объекта и перемещает камеру на это место.

Переключитесь из MonoDevelop в Unity и выберите Main Camera в Иерархии. Существует новое свойство в компоненте сценария CameraFollow, называемое Target Object (Целевой объект).

Чтобы установить Целевой объект, нажмите на mouse в Иерархии и не отпуская перетащите mouse в поле Target Object в Инспекторе.

Откройте скрипт CameraFollow и добавьте приватную переменную distanceToTarget:

private float distanceToTarget;

Затем добавьте следующий код в Start:

distanceToTarget = transform.position.x - targetObject.transform.position.x;

Здесь мы будем рассчитать начальное расстояние между камерой и объектом. Наконец, измените код в Update для учета этой дистанции:

void Update () {

float targetObjectX = targetObject.transform.position.x;

Vector3 newCameraPosition = transform.position;

newCameraPosition.x = targetObjectX + distanceToTarget;

transform.position = newCameraPosition;

}

Создание бесконечного уровня в Unity: создание префаба, генератор комнат (скрипт)

Вы хотите чтобы ваш Префаб содержал все различные элементы комнаты: книжный шкаф, окно, потолок, и т.д. Чтобы включить все эти элементы, как часть того же Префаба, просто добавьте их в родительский объект. Итак, создайте пустой Игровой объект (GameObject) выбрав GameObject\Create Empty. Затем выберите GameObject в Иерархии и сделайте следующие изменения в Инспекторе:

  • Переименуйте его в room1

  • Установите его Position в (0, 0, 0)

Переместите все части комнаты (bg, bg, bg_window, ceiling, floor, object_bookcase_short1, object_mousehole) в room1.

Создайте новую папку по имени Prefabs в Браузере проекта. Откройте и перетащите room1 из Иерархии непосредственно в папку Prefabs.

Создайте новый скрипт C# Script и назовите его GeneratorScript. Добавьте его в игровой объект mouse.

Сначала, добавьте пространство имен System.Collections.Generic, так как вы собираетесь использовать класс List<T>:

using System.Collections.Generic;

Затем добавьте следующие переменные экземпляра:

public GameObject[] availableRooms;

public List<GameObject&gr; currentRooms;

private float screenWidthInPoints;

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

Список currentRooms будет хранить инстанс комнаты, так что скрипт сможет узнать заканчивается ли комната и, если это необходимо, удлиннить ее. Переменная screenWidthInPoints как раз должна кэшировать размер экрана в точках. Теперь, добавьте следующий код в Start:

float height = 2.0f * Camera.main.orthographicSize;

screenWidthInPoints = height * Ca

Здесь мы рассчитываем размер экрана, который будет использоваться для определения нужно ли удлинить комнату, как это было описано выше.