Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Обзор Unity.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
7.91 Mб
Скачать

Размещение группы объектов по заданному шаблону

Допустим вы хотите поместить группу объектов по сетке или кругу. Как всегда, это может быть выполнено двумя способами:

  1. Сборка объекта полностью из кода. Это утомительно! Ввод значений из скрипта и медленный и не интуитивный, и не стоит затраченных усилий.

  2. Сделать полностью готовый объект, дублировать его и несколько раз разместить его на сцене. Это опять же утомительно, а размещать объекты точно по сетке достаточно сложно.

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

// JavaScript

// Instantiates a prefab in a circle

var prefab : GameObject;

var numberOfObjects = 20;

var radius = 5;

function Start () {

for (var i = 0; i < numberOfObjects; i++) {

var angle = i * Mathf.PI * 2 / numberOfObjects;

var pos = Vector3 (Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;

Instantiate(prefab, pos, Quaternion.identity);

}

}

// C#

// Instantiates a prefab in a circle

public GameObject prefab;

public int numberOfObjects = 20;

public float radius = 5f;

void Start() {

for (int i = 0; i < numberOfObjects; i++) {

float angle = i * Mathf.PI * 2 / numberOfObjects;

Vector3 pos = new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)) * radius;

Instantiate(prefab, pos, Quaternion.identity);

}

}

// JavaScript

// Instantiates a prefab in a grid

var prefab : GameObject;

var gridX = 5;

var gridY = 5;

var spacing = 2.0;

function Start () {

for (var y = 0; y < gridY; y++) {

for (var x=0;x<gridX;x++) {

var pos = Vector3 (x, 0, y) * spacing;

Instantiate(prefab, pos, Quaternion.identity);

}

}

}

// C#

// Instantiates a prefab in a grid

public GameObject prefab;

public float gridX = 5f;

public float gridY = 5f;

public float spacing = 2f;

void Start() {

for (int y = 0; y < gridY; y++) {

for (int x = 0; x < gridX; x++) {

Vector3 pos = new Vector3(x, 0, y) * spacing;

Instantiate(prefab, pos, Quaternion.identity);

}

}

}

Ввод

Unity поддерживает как устройства ввода используемые играми (клавиатура, джойстик и т.д.), так и и сенсорные экраны мобильных устройств. Все эти типы ввода показаны в этом разделе.

Кроме того, Unity может воспользоваться микрофоном компьютера и веб-камерой для ввода аудио и видео данных. Смотрите разделы руководства Audio иGraphics для получения дополнительной информации.

Традиционный игровой ввод

Unity поддерживает ввод с клавиатуры, джойстика и гейпада.

Виртуальные оси и кнопки могут быть созданны в Input Manager, и конечные пользователи смогут настраивать ввод с клавиатуры на экране конфигурационного диалогового окна.

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

Из скриптов все виртуальные оси доступны по их именам.

Каждый проект при создании содержит следующие оси ввода по умолчанию:

  • Horizontal и Vertical привязаны к w, a, s, d и клавишам направления.

  • Fire1, Fire2, Fire3 привязаны к клавишам Control, Option (Alt) и Command соответственно.

  • Mouse X и Mouse Y привязаны к перемещениям мыши.

  • Window Shake X и Window Shake Y привязаны к перемещению окна.