Четверг, 18 Апреля 2024, 18:09

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Сколько часов подряд вы обычно играете?
Всего ответов: 1431
Главная » Статьи » Создание игр

Unity3D. Создание RPG. Урок 1. Создание меню
Пролог.
Всем привет. Узнав о Unity3D, я очень обрадовался. Это была вторая вещь в геймдевлопе, которая меня зацепила простотой и интуитивностью (первая Game Maker). Так как я не люблю видеоуроки (сам не знаю почему), в поисках уроков очень сильно напрягался, из-за малого количества текстовых уроков. Поэтому решил написать данный цикл статей, для таких же любителей текстовых уроков как я. Так как этот цикл ориентирован на новичков, попутно будут изучаться возможности Unity3D.
Урок 0 или небольшой план.
«Будущее должно быть заложено в настоящем. Это называется планом.
Без него ничто в мире не может быть хорошим»
Георг Кристоф Лихтенберг

1. Создаем меню с летающей камерой аля Far Cry.
2. Персонаж. Движение и управление. Камера. Меняем позицию и вид камеры.
3. Статы. Часть первая. Опыт, деньги.
4. Квесты.
5. Ai. Искусственный интеллект. Часть первая. Покупка персонажа.
6. Статы. Часть вторая. Жизни, манна. Рисуем HP и MP бары.
7. Ai. Искусственный интеллект. Часть вторая. Мобы.
8. Инвентарь. Магазин.
План может дополняться и изменятся.
Урок 1. Меню с летающей камерой аля Far Cry.
В этом уроке мы узнаем основы создания сцен в Unity3D. Узнаем некоторые стандартные возможности и некоторые дополнительные.
Использовано:
1. Terrain Toolkit http://yadi.sk/d/NECQRcVaCEKuT
2. Nature Pack http://yadi.sk/d/m8Qu8ts2CEKyB
3. Real Nature Pack 2 Autumn v2 http://yadi.sk/d/A4IN7tuMCELA3
4. Tropical Nature Pack http://yadi.sk/d/lTMMWzC4CELCf

План:
1. Создание проекта. Импорт необходимых библиотек.
2. Генерация ландшафта. Редактирование.
3. Освещение. Камера.
4. Анимация камеры(полет).
5. Создание меню.
Создание проекта. Импорт необходимых библиотек.
Запускаем Unity. В «Project wizard» переходим во вкладку «Create New Project». В «Import the following packages» выбираем следующие паки: Skyboxes, Terrain Assets, Water(в зависимости от версии unity3d, я выбрал pro)

Заходи в «Assets>>Import package>>Custom package» и переходим в папку где у вас лежат скачанные паки. Выбираем и нажимаем открыть.


Внимание!!! Паки тяжелые по этому Unity может не слабо задуматься не пугайтесь!!
Генерация ландшафта.
Нажимаем «Terrain>>Create Terrain»

Появился объект «Terrain»
Нажимаем «Terrain>>Set Resolution» И устанавливаем размеры нашего ландшафта как на скриншоте. Для сцены меню на большой ландшафт не нужен и дабы не грузить процессор достаточно этих размеров.

Тыкаем «Set Resolution»
Нажимаем «Component>>Terrain>>Terain Toolkit»

В появившемся компоненте «Terrain Toolkit» я выставил все так

Советую поиграть с настройками очень часто вылазят такие интересные варианты ландшафта.
Итак наш ландшафт готов.
Зададим ему текстуру.
В инспекторе нажимаем на кисточку а затем Edit Textures.

И нажимаем Add Texture. В появившемся окне нажимаем «Select» на Texture

В появившемся окне выбираем текстуру (двойной клик мышью), я выбрал «Grass(Hill)»

Нажимаем Add и наш ландшафт перекрашивается.

Нажимаем «Raise/Lower terrain»

Выбираем кисть, размер(Brush Size) интенсивность(Opacity). И нажимая LBM(Левая кнопка мыши) поднимаем вершину, либо нажимая Shift+LBM опускаем.
Нажимая «Smooth Height» (3 кнопка) убираем острые углы.
Дальше я нарисовал что типа песчаного пляжа добавив текстуру «Good Dirt».
Вот что у меня получилось.
Выбираем «Place trees» и нажимаем «Edit trees». В появившемся окне нажимаем кружочек.
И аналогично выбору текстуры выбираем дерево.
И варируя настройками кисти насаживаем разных деревьев.
Аналогично на предпоследней кнопке насаживаем цветов, травы, камней итд.
С одним НО для того что бы не грузить процессор мы для травы мы выбираем «Add Grass Texture» а вот для остального «Add Details Mesh».
И в последней вкладке можно побаловаться с настройками деревьев, рендера, настройками ветра. Я оставил все стандартно.
Создадим воду. В окне «Project» идем в паку «OnQ Nature Pack 2 v2>>Resources Demo>>Standard Assets>>Water(pro only)» и выбираем «Daylight water».

Перетягиваем на сцену и при помощи кнопок трансформации ставим и растягиваем как нам надо.

Вот что у меня получилось.

На этом с ландшафтом покончено.
Добавим теперь «Skybox». Для Этого идем в «Edit>>Render Settings».

И в инспекторе выбираем материал «Skybox» тыкнув на кружок.

Я выбрал «Sunny2 skybox».
Освещение и камера.
В «GameObject>>Create Other» выберем «Point light».

В инспекторе выставляем навстройки. «Position» x=100 y=100 z=100 это выставит наш источник света по центру над «Terrain» на высоте равной 100. «Range» = 150, это радиус освещения вокруг источника. И «Itensity» = 3.3.

В итоге получился довольно мягкий свет достающий везде.

У нас уже есть стандартно созданная камера «Main Camera». Кликнем на ней в окне Hierarchy. И расположим ей в позиции X=10, Z=10. A Y устанавливаем относительно высоты вашего ландшафта, у меня получилось 45. Что бы уменьшить площадь захватываемой камерой Изменяем настройку «Field of View»(У меня 43). Ориентируясь на окно «Camera Preview» поворачиваем камеру так как нам надо. У меня получилось Rotation X=5, Y=45, Z=0.
Анимация камеры (полет)
Заходим в «Window>>Animation» или нажимаем Ctrl+6. Нажимаем на стрелочки в пустом поле и выбираем «Create New Clip»
Назовем его на пример «CameraFly». Нажмем на палочку на против «Position.x» и нажмем «Add Curves». Установим позицию кадра на 300 и выставляем необходимые координаты следующего положения камеры.
У меня получились следующие значения:
Код

Переменная/номер кадра 300 | 600 | 900 | 1200 | 1500| 1800
Position.x 90 | 10 | 190 | 120 | 190 | 10
Position.y 45 | 45 | 45 | 45 | 45 | 45
Position.z 90 | 190 | 190 | 100 | 10 | 10
Rotation.x 5 | 45 | 15 | 15 | 15 | 15
Rotation.y 45 | 94 | 240 | 140 | 270 | 405
Rotation.z 0 | 0 | 0 | 0 | 0 | 0

Нажмем на кнопочку Play и посмотрим что получилось. И вот наша камера уже летает. Однако пролетев круг она останавливается. Давайте исправим это.
Создадим новый C# скрипт (RMB по окну «Project» далее «Create>>C# Script») и назовем его FlyCamera. В нем пишем в методе Update всего одну строчку:
Код

transform.animation.CrossFade ("FlyCamera");

Этим заставляем циклично выполнять анимацию под названием «FlyCamera». Скрипт помещаем на Main Camera.
Проверяем и все работает).
Создаем меню.
Создадим скрипт под названием «Menu».
Зададим переменные:
Код

public bool showMenu = true; //Отображать ли меню
public int window; //Отображаемое окно

В метод «Start» пишем:
Код

showMenu = true;
window = 1;

В метод «Update» пишем:
Код

if(showMenu == true) //Проверяем включно ли меню
  {
  curTime += Time.deltaTime; //Если включено, Увеличиваем переменную curTime согласно пройденому времени
  }
  if(curTime > lifeTime) //Если время дошло до максимальной точки
  {
  showMenu = false; //Отключаем меню
  window = 0;  
  curTime = 0; //Сбрасываем таймер
  }
  if(showMenu == false&Input.anyKeyDown) //Если меню выключено и нажата любая клавиша
  {
  showMenu = true; //Включаем меню
  window = 1;
  }

Создаем метод «OnGUI» и пишем в него:
Код

if(window == 1) //Если окно 1
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,220), "Меню"); //Создаем окно с меню
   
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "Новая игра"))  
  {  
  Application.LoadLevel(1); //Загружаем уровень 1
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Настройки"))  
  {  
  window = 2; //открываем окно настроек
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "Об игре"))  
  {  
  window = 3; //Выводим информацию об Автарах игры
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Выход"))  
  {  
  window = 4; //Вызываем окно выхода
  }  
  }  
   
  //Далее все аналогично
  if(window == 2)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,250), "Настройки");  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "Игра"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Аудио"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "Видео"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Управление"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+120,180,30), "Назад"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 3)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,220), "Об игре");  
  GUI.Label(new Rect(Screen.width/2-90,Screen.height/2-0, 180, 40), "Инфа о разрабе");  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+100,180,30), "назад"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 4)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-60,200,120), "Выход?");
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-20,180,30), "Да"))  
  {  
  Application.Quit(); //Выход из игры
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+20,180,30), "Нет"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 0) //Если это окно то выключаем меню
  {
  useGUILayout=false;
  }
  }

Скрипт перемещаем на Main Camera.

Сохраним сцену под названием menu.unity

Полный код скрипта menu
Код
using UnityEngine;
using System.Collections;

public class Menu : MonoBehaviour {
  public bool showMenu; //Отображать ли меню
  public int window; //Отображаемое окно
  public float lifeTime = 5.0f; //Максимальное время отображения меню
  private float curTime; //Текущие время отображения меню
   
  void Start () {
  showMenu = true;
  window = 1;
  }
   
  void Update () {
  if(showMenu == true) //Проверяем включно ли меню
  {
  curTime += Time.deltaTime; //Если включено, Увеличиваем переменную curTime согласно пройденому времени
  }
  if(curTime > lifeTime) //Если время дошло до максимальной точки
  {
  showMenu = false; //Отключаем меню
  window = 0;  
  curTime = 0; //Сбрасываем таймер
  }
  if(showMenu == false&Input.anyKeyDown) //Если меню выключено и нажата любая клавиша
  {
  showMenu = true; //Включаем меню
  window = 1;
  }
  }
   
  void OnGUI () {  
  if(window == 1) //Если окно 1
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,220), "Меню"); //Создаем окно с меню
   
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "Новая игра"))  
  {  
  Application.LoadLevel(1); //Загружаем уровень 1
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Настройки"))  
  {  
  window = 2; //открываем окно настроек
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "Об игре"))  
  {  
  window = 3; //Выводим информацию об Автарах игры
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Выход"))  
  {  
  window = 4; //Вызываем окно выхода
  }  
  }  
   
  //Далее все аналогично
  if(window == 2)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,250), "Настройки");  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-40,180,30), "Игра"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-0,180,30), "Аудио"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+40,180,30), "Видео"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+80,180,30), "Управление"))  
  {  
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+120,180,30), "Назад"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 3)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-80,200,220), "Об игре");  
  GUI.Label(new Rect(Screen.width/2-90,Screen.height/2-0, 180, 40), "Инфа о разрабе");  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+100,180,30), "назад"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 4)  
  {  
  GUI.Box (new Rect (Screen.width/2-100,Screen.height/2-60,200,120), "Выход?");
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2-20,180,30), "Да"))  
  {  
  Application.Quit(); //Выход из игры
  }  
  if(GUI.Button (new Rect (Screen.width/2-90,Screen.height/2+20,180,30), "Нет"))  
  {  
  window = 1;  
  }  
  }  
   
  if(window == 0) //Если это окно то выключаем меню
  {
  useGUILayout=false;
  }
  }  
}

Компилированная сцена http://yadi.sk/d/f5pFI0_pCG7YC

P.S. Прошу строго не судить, это моя первая статья.
P.P.S. Для тролей: да я быдлокодер, идите лесом!

Категория: Создание игр | Добавил: rak (06 Ноября 2013) | Автор: rak
Просмотров: 77976 | Комментарии: 19 | Рейтинг: 4.8/20 |
Теги: Меню, уроки Unity на русском, RPG, Unity3D, с# основы, летающая камера, новичкам, Генератор ландшафтов, ландшафт, Уроки unity3d
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «Unity3D. Создание RPG. Урок 1. Создание меню», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 19
+0-
18 qaz1998andrey   (11 Января 2014 16:59) [Материал]
qaz1998andreyА какая это версия Unity3D? Просто у меня Unity3D 4 и я не могу с камерой разобраться smile А так эти уроки мне очень понравились. Автор молодец smile

+0-
19 rak   (28 Января 2014 17:57) [Материал]
версия 4.3

+0-
17 SparrowDreamer   (01 Января 2014 21:36) [Материал]
Полезно для новичков вроде меня)).
Уроки созданные для ознакомленных с Unity3D пригодятся далеко не сразу. Буду следить за вашими статьями, надеюсь доведете дело до конца. Благодарю за то, что пишете эти уроки. Успехов)

+0-
10 Tiksi   (09 Ноября 2013 16:15) [Материал]
TiksiИнтересный урок,для новичков как минимум.Да, я и сам новичок,познавательно,жду новых уроков.

+0-
9 beril   (09 Ноября 2013 03:23) [Материал]
berilПочему одна &, а не && ?? Это все таки оптимизация как не как cool

+0-
11 rak   (09 Ноября 2013 21:04) [Материал]
Я сразу сказал что ябыдлокодер biggrin

+-8-
7 JHawk   (08 Ноября 2013 15:12) [Материал]
JHawkО МОЙ БОГ!!!!! ЕЩЕ ОДИН ТУПОЙ ТУТОРИАЛ по созданию РПГ, НАЧИНАЮЩИЙСЯ С СОЗДАНИЯ МЕНЮ!!! КАК ВЫ МЕНЯ ДОСТАЛИ ТУПЫЕ ШКОЛЬНИКИ/РАКИ/НУБЫ............

+0-
12 rak   (09 Ноября 2013 21:05) [Материал]
Во первых перед заявлением о школоло Смотри на возраст человека которому ты это пишешь.

+0-
4 NEBR   (08 Ноября 2013 09:13) [Материал]
NEBRОт одного урока конечно, толку мало, но если цикл будет доведен до конца, будет круто! Я так понимаю, данный курс будет переработанным курсом от Огасода (который в свою очередь переводил курс какого то забугорного чувака) ?
Вообщем удачи, автор молодец!

+-1-
5 rak   (08 Ноября 2013 10:30) [Материал]
Спасибо. В общем да это переработанный курс, и написанный как я считаю в лудшем порядке для восприятия.

+4-
3 kvestpro   (08 Ноября 2013 08:40) [Материал]
kvestproПо этим простым вещам уже куча уроков на английском и, как минимум, три русских команды сделали видео уроки.
может хватит писать про раскрашивание террейна и размещение кнопок?

+-2-
6 rak   (08 Ноября 2013 10:31) [Материал]
Это только первый урок. А на счет видио я уже написал что я не люблю видеоуроки, и в первую очередь пишется для людей которые так же не любят видеоуроки.

+1-
1 true_abrakadabra   (07 Ноября 2013 23:50) [Материал]
true_abrakadabraКонечно, разработка игр начинается с меню...

+-1-
2 rak   (08 Ноября 2013 05:31) [Материал]
Цель урока, ни с чего начинается разработка игры, а познакомить пользователя с интерфейсом.

+0-
8 JHawk   (08 Ноября 2013 15:14) [Материал]
JHawkДа будет тебе известно, что больше 90% всех уроков которые пишутся по юнити пишутся для людей уже знакомых с интерфесом редактори и умеющим с ним маломальски работать! И ненадо писать "Созадние РПГ", потому что ты все равно не напишишь ничего толкового! АБСОЛЮТНО НИЧЕГО!

+0-
13 rak   (09 Ноября 2013 21:08) [Материал]
Во вторых, напишу я что толковое или нет не тебе судить так как у само за душой ни чего нет, кроме змейки. Да и высказывания надо делать после того как сам что ни будь полезное сделаешь для сообщества. И спецом для тебя могу в перед уроков доделать то что в итоге получится, или дождешься вместе со всеми окончания цикла статей?

+0-
14 NEBR   (10 Ноября 2013 11:42) [Материал]
NEBRты что, ясновидящий? Если тебе не нужны эти уроки, не смотри эту тему, всего делов. Если кому то пригодится - будет хорошо. Парень же расписал план, сообщил о том что будет дальше. Материал, который он (переработанный) выкладывает, есть в виде видеуроков у двух людей - в сжатом ввиде у Огосоды (который тот так и не закончил), и на английском языке у чувака с ютуба. Оба варианта - видеоуроки, а наш парень делает эту тему для людей предпочитающих текстовый формат, которых, кстати, много (мой брат например). Что тоже достойно уважения.

+0-
15 rak   (10 Ноября 2013 13:30) [Материал]
Спасибо за поддержку) Кстати план уроков не много изменился, в 3 уроке выложу как и по чему. И теперь это будет не просто переработка уроков Огосоды, А больше направляться к моим личным наблюдениям и реализациям. и в некоторых моментах это возможно будет чистая импровизация. smile

+0-
16 NEBR   (10 Ноября 2013 14:54) [Материал]
NEBRДавай, дерзай ) Огасода в свое время отказался от этого курса, потому что оригинальный автор слишком много уходил в наследование, тогда как можно было сделать быстрее и проще. В целях освоения основ ООП этот курс будет полезен, расписано там толково

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • microStudio
  • Silent Walk: RENAISSANCE
  • eXgine
  • M.U.G.E.N
  • Core
  • INSTEAD
  • Shoot 'Em Up Kit
  • Arrow
  • Arcade Game Studio
  • Mario Worker
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг