Этой статьёй мы начинаем серию уроков по созданию 3D-игры. Мы рассмотрим процесс создания простого FPS (First Person Shooter – шутер от первого лица).
Я постараюсь разобрать весь процесс от начала и до конца, от установки необходимого инструментария до компиляции готовой игры. Вы узнаете о таких полезных вещах, как система здоровья, система оружия, gameplay, оптимизация графики и т.д.
Мы будем вместе делать игру с нуля, и постараемся довести её до конца. В итоге должно получиться что-то играбельное:)
Итак, поехали.
Начнем с самого начала – добудем себе инструментарий. Создавать игру будем на движке Unity3D, поэтому прежде всего скачаем его.
Выходим в интернеты, и отправляемся на сайт http://unity3d.com. Заходим в раздел Downloads, и там будет ссылка на закачку движка. Весит сие творение около полгигабайта.
По поводу лицензии. Есть две версии Юнити – индии-версия и Pro. Инди совершенно бесплатна, но имеет некоторые ограничения. Водичка в игре будет не такая реалистичная, к примеру, как в Pro. Ну и еще некоторые нюансы, но о них позже. В принципе, бесплатной версии нам вполне должно хватить для начала. А за версию Pro придется заплатить деньги, и довольно приличные. Но есть и третий вариант – ознакомительный 30-дневный период. Если хотите посмотреть все возможности движка – качайте пробную 30-дневную версию программы. Я например так и сделаю.
Скачали движок, установите его себе на компьютер. Там все интуитивно понятно, расписывать особо нечего.
После запуска программы перед нами открываются вот такие виды:
Ну или что-то подобное, расположение элементов может отличаться от того, что на картинке.
Все это мы с вами рассмотрим по ходу строительства нашей 3D игры. А пока предлагаю сразу создать новый проект, и сохранить его для наших дальнейших изысканий. В главном меню выбираем File – New Project. Появится вот такое окошко:
Здесь нам предлагается указать папку, в которой будет лежать наш проект, а также указать необходимые пакеты, которые импортируются в игру. Я обычно проставляю все птички, оно не помешает. Укажите папку для создания проекта, и жмите Create.
После этого Юнити закроется, а потом запустится опять, и начнет импортировать пакеты. Процесс этот займёт около 5-10 минут, так что можно пойти покурить.
Итак, новый проект создался, и сохранился в указанной вами папке.
Посмотрим, что же мы имеем.
Окно Scene – это основное окно программы, здесь мы будем строить наш 3D-мир. Окно Game – это вывод главной камеры. Здесь мы будем тестировать нашу сцену. В окне Hierarchy отображены все объекты сцены в иерархическом порядке, а в окне Project – все доступные для проекта объекты, пакеты, скрипты и т.д.
Другими словами – окно Project – это путеводитель по нашей папке с игрой. Попробуйте зайти в папку с вашей игрой, куда вы сохраняли проект, а затем в папку Assets. И вы увидите ту же структуру папок, что и в окне Project.
Вообще, Unity3D устроен таким образом, что импорт объектов в проект происходит автоматически при помещении объекта в папку проекта. К примеру, взяли файл 3ds с персонажем, созданным в 3DS Max, закинули его в папку Standard Assets – и он сразу появляется в окне Project, и вы можете перетащить его на сцену, прикрепить его к другому объекту, присвоить ему скрипт и т.д. Очень удобно. Но об этом позже, а сейчас продолжим изучать наши окна.
Scene, Game, Hierarchy и Project мы рассмотрели, остаётся окно Inspector. Это окно свойств объекта, грубо говоря. То есть выбрали в Hierarchy какой либо объект сцены – и в Inspector отобразились его свойства, которые можно изменять. Для начала этой информации хватит, всё это мы изучим по мере создания игры.
Ну, я думаю для первого урока достаточно, устанавливайте Unity3D, и самостоятельно рассмотрите все окна, чтобы более-менее ориентироваться для дальнейшей работы с программой.
В следующей статье мы скачаем необходимые дополнения и импортируем их в Unity.
Продолжение следует, спасибо за внимание.
В предыдущей статье мы с вами скачали и установили движок Unity3D, создали новый проект, и рассмотрели основные окна программы.
Сегодня мы скачаем и установим два важных дополнения к движку – Terrain Assets и Lens Flares. Первое пригодится при создании ландшафтов, а второе – для добавления эффектов солнечных бликов к камере.
Итак, заходим опять на сайт unity3d.com, и находим там раздел Resources, а в нем подраздел Assets. В подразделе Assets ищем Terrain Assets и Lens Flares. Скачайте их себе на компьютер.
Теперь добавим их в Unity3D.
Для этого в главном меню выбираем Assets – Import Package, затем Custom Package.
Выбираете файл с пакетом, который скачали с сайта, появится такое окно:
Нажмите Import, и начнется процесс добавления ассета. Так же добавьте второе дополнение.
Теперь обратите внимание на окно Project. Там должны были появиться два новых пункта - Terrain Assets и Flares. Как на рисунке:
Все, теперь у нас есть все что нам нужно для создания игры. Теперь можете настроить внешний вид программы таким образом, чтобы вам было удобно работать с окнами. Просто перетаскивайте мышью окна в нужные места, и изменяйте их размеры. Я например сделал так:
Теперь окно Scene занимает больше пространства, мне кажется так удобнее будет работать с объектами сцены, да и тестировать игру лучше на более крупном окне.
В следующем уроке мы разберемся с понятием сцены, и начнем делать меню и заставку для нашей игры.
Удачи!
Здравствуйте, товарищи.
На прошлых занятиях мы с вами разобрались с программой Unity3D. Ну, то есть, установили её на компьютер и немного сориентировались в окнах. Теперь мы можем приступать к созиданию.
Движок Юнити – очень удобный инструмент. Если вы раньше интересовались игростроем, то вы должны знать, что создание 3D–игры с нуля – занятие не для слабонервных. Конечно, если вы специалист по программированию на C++, можете попробовать написать свой движок, который должен включать в себя как минимум рендерер с оптимизацией графики, физический движок или на худой конец просто определение столкновений, поддерживать работу по сети, звук и т.д.
Умные люди говорят, что одному человеку это не под силу, тем более что после всего этого вам придётся создавать логику игры, Gameplay, модели, звук, и много еще разных деталей, тысячи их…
Лично меня это не остановило, и я принялся писать свой движок. Опустив подробности, скажу, что потерпел полнейший фэйл. И не потому, что не хватило знаний, а по причине несоответствия трудозатрат ожидаемому результату. Говоря по-нашему – я задолбался. В этом нет никакой романтики, я гарантирую вам это. Писать свой движок – это для маньяков, и пока я не напоролся на эти грабли, меня невозможно было в этом убедить.
Поэтому я не буду убеждать в этом вас, тем более что это лучший опыт в игрострое.
Ну, а для тех, кто уже наступил на эти грабли и решил воспользоваться сторонним движком, скажу: Юнити – это очень даже хорошо:)
А если серьёзно, то это даже не движок, а скорее IDE для построения трехмерных программ. И не обязательно это должна быть игра, пусть это будет любое приложение с трехмерным гуем (простите за откровенность). Вам больше не надо думать о низкоуровневых взаимодействиях, достаточно загрузить в Юнити 3D-объект, добавить ему свойства, поведение (с помощью скриптов), и вот он уже взаимодействует с окружающим миром.
Вы можете сосредоточиться на игровой логике, графике и звуке, вам больше не надо проектировать самому сложные системы взаимодействия, создавать octree, графы сцены и т.д. Взял, сделал модель в максе, или попросил брата, как это делаю я:) И остается назначить этой модели логику.
Всё вышесказанное вовсе не означает, что будет легко. Будет довольно сложно. Но это только верхушка айсберга, основную часть которого скрывает в своих недрах Unity3D. Начав создавать игру в Юнити, вы представите, что бы вам пришлось пережить, решись вы писать игру с нуля.
Но хватит лирики, приступим.
Что такое сцена? Сцена – это совокупность объектов в пространстве, объединенных в одном логическом контексте. То есть это любые сущности вашей игры, необходимые именно в конкретном уровне. Или даже не так, одна сцена может участвовать в нескольких уровнях, скорее, сцена – это понятие проектирования. Вобщем, это множество предметов, объединенных вместе. Например, трюм корабля, с гамаками, бочками и разным хламом – это сцена. Хотя если более полно – то там еще и звуки, качка, пьяные пираты и ром, который можно взять и выжрать. Всё это сцена.
В Unity3D сцену можно строить визуально. Запустите Unity. Видите самое большое окно, с заголовком Scene? Это ваш будущий трёхмерный мир. Под заголовком есть три иконки:
Это свет, текстура и звук. То есть эти кнопки отключают или включают в сцене эти составляющие. Еще один важный элемент:
С помощью него можно вращать сцену. Нажав мышью на одну из осей, вы повернете всю сцену этой осью к вам. Нажав на центр – повернете сцену в стандартное положение.
Сразу создадим некий объект, чтобы лучше понять суть.
Объекты создаются из главного меню, GameObject-CreateOther. Выберите там пункт Cube.
Создастся куб, и вы увидите что-то такое:
Обратите внимание на окно Hierarchy. Там появился пункт Cube. Попробуйте дважды щелкнуть по нему мышью. Сцена автоматически приблизится таким образом, чтобы на первом плане был выбранный объект. Запомните эту операцию, очень удобная вещь. Теперь попробуйте повращать сцену с помощью стрелок навигации:
Колесиком мыши можно приблизить сцену, Зажав правую кнопку и перемещая мышь, можно осматривать сцену, поворачиваясь вокруг точки своего месторасположения, а зажав среднюю кнопку(колесико), можно перемещаться над сценой. И помните, в любой момент, клацнув дважды по объекту в окне Hierarchy, вы вернетесь к нему.
Потренируйтесь работать со сценой, перемещаться по ней, посоздавайте объекты, и обратите внимание на их свойства в окне Inspector. Попробуйте поизменять их. Больше мы не будем возвращаться к этим нюансам.
А на следующем занятии мы вплотную займёмся нашей игрой, и создадим Splash-заставку и меню.
До следующего урока!
Наконец мы с вами добрались до практики.
Сегодня мы попробуем сделать меню и сплэш-заставку для нашей будущей игры. Итак, начнём.
Запустим Unity3D, и создадим две сцены. Для этого в главном меню выбираем пункт File-New Scene. Потом сохраняем эту сцену под именем MenuScene. Сохраним ее в новой папке, которую назовем Scenes. Здесь будут лежать все сцены нашей игры.
Для того, чтобы сохранить сцену, выбираем в меню File-Save Scene as…
Таким же образом создайте вторую сцену, и назовите её TestScene. Теперь окно Project должно содержать папку Scenes с двумя нашими сценами:
Двойным щелчком по названию сцены можно перейти в необходимую сцену. Перейдите в сцену MenuScene. В главном меню выберите File – Build Settings. Должно появиться такое окно:
Нажмите кнопку Add Current и закройте окно. Теперь перейдите в сцену TestScene и опять выберите в меню File – Build Settings, и нажмите Add Current.
В результате этих манипуляций в окне Build Settings появятся наши сцены:
Обратите внимание, что справа от названия сцены есть порядковый номер. Нумерация начинается с нуля, и сцена под номером 0 загружается всегда первой. У нас это сцена MenuScene, в ней будет заставка и меню. А уже из этой сцены будет грузиться сцена под номером 1, это наша тестовая сцена, потом мы заменим её на созданный нами игровой уровень.
Как все будет работать? Для начала нам нужна сплэш-заставка, она будет показана сразу после запуска игры. Для этого создадим плэйн, и натянем на него текстуру. Можно нарисовать её в фотошопе, или взять любую фотку для пробы. Вообще нам понадобятся две картинки, одна для заставки, а другая для фона меню. Вот здесь есть урок по созданию сплеш-заставки в фотошопе. А здесь можно посмотреть, как сделать заставку для меню.
Переходим в сцену MenuScene, и создаём плэйн: GameObject – CreateOther – Plane.
Теперь натянем на него текстуру. Для этого забросьте приготовленные картинки в папку Assets. А лучше создайте в ней отдельную папку Textures. А потом просто перетащите текстуру из окна Project на плэйн. Теперь нам нужно установить главную камеру над плейном так, чтобы она была направлена точно на текстуру. В окне Hierarchy найдите строку Main Camera, и выделите ее мышью.
В окне Inspector, в группе Transform вы увидите координаты камеры, углы поворота по трем осям, и масштабирование:
Установите Rotation X в 90. Position X и Z в 0, Position Y подберите таким образом, чтобы камера захватывала всю картинку.
Перейдите в окно Game, и оцените вид картинки. Если она вверх ногами – установите Rotation Y в 180.
У меня получилось вот так:
Вобщем, нормально, только темно слишком. Добавим источник света на сцену.
GameObject – CreateOther – DirectionalLight.
Установите источнику Rotation X в 90. Rotation Y и Z в 0. Position X, Y, Z – 0.
Теперь свет направлен прямо вниз, и заставка выглядит получше:
Теперь создадим такой-же плэйн, только расположим его в координатах 0,0,11. И натянем на него другую заставку, ту что приготовили для меню. Должно получиться нечто такое:Теперь наша задача – по нажатию кнопки escape удалить первый плэйн, а второй поставить на его место. Для этого напишем небольшой скрипт на языке C#. И в этом же скрипте будет логика работы меню. Я долго думал, стоит ли разбирать каждую строчку скрипта, и пришел к выводу, что это лишнее. Код будет с комментариями, так что можно будет все понять. C# - это тема целой книги, поэтому нет смысла пытаться объяснить все в одной статье. Поэтому гугл в руки – и читаем литературу по этому языку. А здесь я буду рассказывать вещи специфические, не вдаваясь в подробности синтаксиса.
Для того, чтобы в игре что нибудь происходило – нужно запрограммировать поведение объекта. Меню – это тоже объект с поведением. Поэтому создадим на нашей сцене пустой объект:
GameObject – CreateEmpty.
В окне Hierarchy переименуем его в Menu.
Теперь нам нужен скрипт для меню. Создадим в Assets новую папку под названием Scripts. Здесь будут храниться все наши скрипты. Затем щелкнем правой кнопкой по этой папке, и выберем Create – C# Script. Создастся скрипт, его необходимо переименовать в Menu. Так как объект, к которому будет привязан этот скрипт, должен называться также, как и скрипт. Теперь окно Project выглядит так:
Теперь дважды клацаем мышью по скрипту. Стираем все что там есть, и пишем следующий код:
Code
using UnityEngine;
using System.Collections;
//объявляем класс Menu
//обратите внимание, имя класса обязательно совпадает
//с именем скрипта
public class Menu : MonoBehaviour {
public GUIStyle _style;
public GameObject SplashPlane; //эти параметры будут доступны в юнити
public GameObject MenuPlane; //сюда мы присвоим наши плэйны
public Texture2D _cursorImage; //а сюда текстуру для курсора
//далее идут константы состояний
//программа должна знать, в каком состоянии она находится,
//заставка это, меню или игра уже началась.
private const int ST_SPLASH = 0;
private const int ST_MAINMENU = 1;
private const int ST_QUIT = 2;
private const int ST_GAME = 3;
//а это состояния меню-
//главное меню, опции или «об игре»
private const int MP_NONE = 0;
private const int MP_MAIN = 1;
private const int MP_OPTIONS = 2;
private const int MP_ABOUT = 3;
//а вот и переменные, которые будут хранить
//в себе состояния игры и меню.
private int appState;
private int menuPage;
//эта переменная нужна, чтобы определить,
//это первый старт меню, или же оно вызвано из игры.
//а нужно это для того, чтобы корректно отображать кнопки
//«старт» и «продолжить».
private bool _firstRun = true;
//функции-заглушки.
//позже мы их заполним, когда в игре появятся объекты,
//нуждающиеся в блокировке на время паузы.
void UnlockGame()
{
}
void LockGame()
{
}
//эта функция вызывается во время запуска сцены
//установим состояние игры – Сплэш-заставка,
//и пустую страницу меню.
void Start () {
appState = ST_SPLASH;
menuPage = MP_NONE;
}
//а эта функция вызывается еще раньше чем Start (),
//здесь мы указываем, что меню уничтожать не надо,
//даже когда стартует следующая сцена.
//ведь мы будем еще вызывать его по нажатию Escape
void Awake ()
{
DontDestroyOnLoad(this);
}
//следующая функция будет вызываться каждый кадр.
//здесь мы отлавливаем нажатие клавиши Escape,
//и в зависимости от текущего состояния устанавливаем другое
//состояние.
void Update () {
if (Input.GetKeyDown(KeyCode.Escape))
{
switch (appState)
{
case ST_SPLASH:
appState = ST_MAINMENU;
menuPage = MP_MAIN;
break;
case ST_MAINMENU:
switch (menuPage)
{
case MP_MAIN:
if (_firstRun)
{
appState = ST_MAINMENU;
menuPage = MP_MAIN;
}
else
{
appState = ST_GAME;
menuPage = MP_NONE;
UnlockGame();
}
break;
case MP_OPTIONS:
menuPage = MP_MAIN;
break;
case MP_ABOUT:
menuPage = MP_MAIN;
break;
}
break;
case ST_GAME:
appState = ST_MAINMENU;
menuPage = MP_MAIN;
LockGame();
break;
}
}
}
//эта функция будет вызываться при отрисовке ГУИ.
//тоже проверяется текущее состояние и в зависимости от него
//вызывается соответствующая функция отрисовки
void OnGUI()
{
switch (appState)
{
case ST_SPLASH:
//рисуем сплэш
DrawSplashGUI();
break;
case ST_MAINMENU:
switch (menuPage)
{
case MP_MAIN:
//рисуем главную страницу меню
DrawMainMenuPage();
break;
case MP_OPTIONS:
//рисуем страницу меню «настройки»
DrawOptionsMenuPage();
break;
case MP_ABOUT:
//рисуем страницу меню «об игре»
DrawAboutMenuPage();
break;
}
//отрисовываем курсор
DrawCursor();
break;
case ST_QUIT:
//выходим из игры
AppQuit();
break;
case ST_GAME:
if (_firstRun)
{
//загружаем сцену под номером 1
Application.LoadLevel(1);
_firstRun = false;
}
else
{
}
break;
}
}
void DrawSplashGUI()
{
//не показываем курсор на сплэш-заставке
Screen.showCursor = false;
//далее идет отрисовка надписи стандартной функцией Юнити
int lHeight = 25;
int lWidth = 370;
Rect _pos = new Rect((Screen.width / 2) - (lWidth / 2), (Screen.height - lHeight), lWidth, lHeight);
GUI.Label(_pos, "Нажмите Escape для продолжения", _style);
}
//рисуем главную страницу меню:
void DrawMainMenuPage()
{
if (_firstRun){
Destroy(SplashPlane);
Vector3 dir;
dir.x = 0;
dir.y = 0;
dir.z = 0;
MenuPlane.transform.position = dir;
}
int _buttonHeight = 30;
int _buttonWidth = 150;
int _space = 5;
int _left = 40;
int _top = 40;
Rect _posNew = new Rect(_left, _top, _buttonWidth, _buttonHeight);
Rect _posOptions = new Rect(_left, _top + _buttonHeight + _space, _buttonWidth, _buttonHeight);
Rect _posAbout = new Rect(_left, _top + (_buttonHeight * 2) + _space * 2, _buttonWidth, _buttonHeight);
Rect _posQuit = new Rect(_left, _top + (_buttonHeight * 3) + _space * 3, _buttonWidth, _buttonHeight);
string _lbl;
if (_firstRun)
{
_lbl = "Старт";
}
else
{
_lbl = "Продолжить";
}
if (GUI.Button(_posNew, _lbl))
{
appState = ST_GAME;
menuPage = MP_NONE;
if (!_firstRun) UnlockGame();
}
if (GUI.Button(_posOptions, "Настройки"))
{
menuPage = MP_OPTIONS;
}
if (GUI.Button(_posAbout, "Об игре"))
{
menuPage = MP_ABOUT;
}
if (GUI.Button(_posQuit, "Выход"))
{
appState = ST_QUIT;
menuPage = MP_NONE;
}
}
//рисуем страницу меню «настройки»
void DrawOptionsMenuPage()
{
int _buttonHeight = 30;
int _buttonWidth = 150;
int _left = 40;
int _top = 40;
Rect _posBack = new Rect(_left, _top, _buttonWidth, _buttonHeight);
if (GUI.Button(_posBack, "Назад"))
{
menuPage = MP_MAIN;
}
}
//рисуем страницу меню «об игре»
void DrawAboutMenuPage()
{
int _buttonHeight = 30;
int _buttonWidth = 150;
int _left = 40;
int _top = 40;
Rect _posBack = new Rect(_left, _top, _buttonWidth, _buttonHeight);
if (GUI.Button(_posBack, "Назад"))
{
menuPage = MP_MAIN;
}
}
//рисуем курсор
void DrawCursor()
{
Vector3 mousePos = Input.mousePosition;
float sizeCursor = _cursorImage.width;
Rect cursorRect = new Rect(mousePos.x, Screen.height - mousePos.y, sizeCursor, sizeCursor);
GUI.Label(cursorRect, _cursorImage);
}
//выходим из игры
void AppQuit()
{
Application.Quit();
}
}
Такой вот скриптец.
Затем мы должны присвоить этот скрипт объекту меню. Сохраняем его, в окне Hierarchy выделяем пустой объект Menu, и из окна Project тянем скрипт мышкой в окно Inspector.
Должно получиться вот так:
Теперь заполняем параметры скрипта в окне Inspector. На поле Splash Plane перетаскиваем из Hierarchy наш плэйн заставки, а на поле Menu Plane – второй плэйн. На поле Cursor Image перетащите заранее заготовленную текстурку для курсора. Вот как выглядит окно Inspector после этого у меня:
Теперь можно попробовать запустить игру. Должна появиться заставка, по нажатию Escape – меню. Нажав на кнопку «Старт», вы запустите тестовую сцену TestScene, в которой пока еще ничего нет. Если нажать Escape опять – снова запускается меню.
Если возникли трудности – пишите в комментариях, постараемся разобраться.
Ну, на сегодня всё, спасибо за внимание.
Сегодня мы с вами создадим для нашей игры ландшафт, а также добавим временного персонажа, чтобы можно было побродить по нашему миру. И немного подправим наш скрипт меню.
От слов – к делу.
Запускаем Unity3D, откроется наш проект. Переименуйте TestScene в TerrainScene, и откройте её, дважды клацнув мышью. Это наша заготовка, и сейчас мы будем тут творить.
В главном меню выбираем Terrain – Create terrain. Сразу же вы увидите, как создалась плоскость серого цвета. Это и будет наш ландшафт:
Зайдите в Terrain – Set resolution. Откроется такое окно:
Здесь можно изменять параметры ландшафта. Сейчас он 2000 на 2000 метров, с максимальной высотой 600 метров. В принципе пока достаточно. Теперь посмотрите вправо, на окно Inspector. Ну, то есть у меня оно справа, у вас может быть где угодно, смотря, где вы его разместили. Итак, смотрим на окно Inspector:
Видите эту панель? Это редактор ландшафта. Нажмите на самую первую кнопку, чтобы открылась такая панелька:
Теперь начинается творчество. Выбираем кисть, внизу ползунками выставляем ей размер и резкость, и рисуем мышью по ландшафту, зажимая левую кнопку. Получается вот такое вот чудо: Коряво как-то. Нажимаем третью кнопку на панели:
и сглаживаем неровности. Теперь уже получше:
Таким образом, пользуясь этими инструментами, создайте ландшафт. Желательно с учетом того, что там будет водоём.
Поковырявшись полчаса (с учетом перекуров), я получил вот такое вот:
Дико, конечно, но для какого-нибудь горного озера пойдёт. Попробуем раскрасить это адаробло, может будет получше. Нажимаем на панели четвертую кнопку с кисточкой:
Всё тоже самое почти, но еще появилась кнопка Edit Textures. Нажимаем её, и из списка выбираем Add Texture. Откроется такое окошко:
Нажимаем на маленький кружок справа от None (Texture 2D), и выбираем себе текстуру. Я выбрал Grass(Hill):
Потом нажимаете Add, и текстура добавляется на панель:
Так как это первая текстура, то ландшафт автоматически раскрасится. Теперь нам надо добавить еще несколько текстур, чтобы добавить оттенков. Я добавлю еще какую-нибудь серую, для гор, и песок, для того чтобы не было всё сплошняком зелено-однообразное. А потом выбираете кисть, текстуру – и рисуете по поверхности ландшафта. Вот так, к примеру: Теперь было б хорошо пробежаться по местности. В окне Hierarchy удалите Main Camera. Затем в окне Project найдите Standard Assets. В этой папке находим Character Controllers.
Перетащите First Person Controller на ландшафт. В окне Inspector установите ему тэг Player. В окне Hierarchy дважды клацните по нему. Должно получиться что-то такое:
Это и есть персонаж для FPS. Приподнимем его немного по оси Y, чтобы он не пересекался с ландшафтом, иначе провалится и отправится в далёкое путешествие.
В окне Hierarchy разверните список персонажа, и найдете там MainCamera. выделите эту строчку мышью, и перейдите в главном меню:
Component – ImageEffects – Blur.
Теперь в окне Inspector в самом низу найдите Blur Effect и снимите с него флажок.
Мы это сделали для того, чтобы во время паузы включать этот флажок скриптом, и получить размытие.
Теперь можно перейти в окно Game и запустить игру. Чтобы запустить, нажмите треугольник сверху:
Чтобы остановить игру – жмите его же.
Если вы все сделали правильно, то вы сможете перемещаться по ландшафту стрелками или клавишами WASD, и осматриваться мышью. Вобщем, всё работает, но выглядит неважно. Потому, что во-первых, нет освещения, а во-вторых, нет неба. Сейчас мы это исправим. Сначала добавим свет:
GameObject – Create Other – Directional Light.
Поверните свет таким образом, чтобы картинка была как можно реалистичнее. Попробуйте еще раз пробежаться по ландшафту. Сейчас уже получше, но все равно не фонтан. Добавим небеса.
Edit – Render Settings.
Теперь в окне Inspector выбираем Skybox.
Я выбрал Sunny1. Теперь все выглядит намного лучше, даже солнце есть на небе. Добавим еще один штрих. Блики на камере. В окне Hierarchy выделите источник света, а потом в окне Inspector параметру Flare присвойте значение 85mm lens.
Блики скорей всего не совпадут с солнцем на небе, поэтому надо повращать источник света, до тех пор, пока его направление не совпадет с направлением солнца на небе. попробуйте совместить блик с солнцем.
Теперь совсем хорошо смотрится:
Освещение местности совпадает с расположением солнца на небе, да еще и блики на камере добавляют реалистичности.
Теперь сохраним сцену и проведем небольшой эксперимент.
Перейдите в сцену MenuScene, и запустите её. Нажмите кнопку старт. Должна запуститься наша игра. А теперь нажмите Escape. Запускается меню, и вроде все отлично, да не всё. Пауза не происходит, вы можете бежать дальше, и на вас смогут напасть, пока вы копаетесь в меню. Надо подправить наш скрипт Menu.
Alisher987, "небольшой" скрипт - доставил. Его остатки и на хлеб не намазать. Мой тебе совет Пабло - относись к жизни как к веселухе, но непродолжительной. @Эш
Alisher987, это скорей пережованные туториалы, туторы для чайников c: полезно для новечков ИМХО лучше назвать тему как "FPS для чайников" BridgeGamingTeam
Сообщение отредактировал nik - Воскресенье, 09 Декабря 2012, 10:35
Честно говоря на туториал по FPS это совсем не похоже Просто обычные вводные уроки, есть десятки вводных уроков по установи, вот это окно для просмотра, а это файлы там всякие, сделай террарий, в общем по очевидным вещам токо. Нет чтоб что то нормальное и полезное сделать. У меня чувство, что уроки пишут люди, которые 2 часа как скачали Unity, (да не только Unity, почти во многих программах так), и показывают этими уроками что они умеют
Сообщение отредактировал OlegDSX - Воскресенье, 09 Декабря 2012, 11:06