Создание игры на UDK

(Материалы по UDK)

Модератор: Buxyr

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Создание игры на UDK

Сообщение KrisGames » Сб фев 04, 2012 8:48 am

В этом туториале:
- Как правильно настроить папки и директории для Вашей игры
- Как настроить и скомпилировать скрипты
- Как создать базовую игру от третьего лица используя базовые ресурсы UDK
- Как сконфигурировать INI файлы
- Как создать очень простой уровень
- Как создать простое меню
- Как добавить поддержку нескольких языков
- Как правильно "приготовить” релиз Вашей игры
- Как упаковать и распространять Вашу игру
- Как устранить возможные неполадки

Папки

Существует 4 основных типа папок.

Binaries – Содержит game EXE, UnrealFrontEnd и несколько дополнительных программ.
Development – Эта папка содержит исходники UnrealScript файлов. Очень важная директория. Именно отсюда игра берет исходники в виде UC файлов и компилит их в U файлы.
Engine – Здесь хранятся файлы, которые необходимы для корректной работы движка. Не рекомендуется удалять или изменять находящиеся там файлы.
UTGame – Здесь хранятся все файлы Вашей игры. Вся основная работа будет вестись преимущественно в этом каталоге.

В каталоге UTGame есть несколько важных папок.
Config – Содержит INI файлы. Данные файлы очень важны для игры, в них описываются настройки.
Content – Содержит текстуры, модели, звуки и т.п. для игры. Эта папка также имеет очень большое значение.
Localization – Содержит текст диалогов, текст меню и так далее. Все текстовые файлы игры находятся в этой папке.
Movies – Вступительные ролики, ролики с заставок и т.п.
Script – Скомпиленные игровые скрипты
Splash – Сплеш скрины из игры.

Прочие папки в UTGame не очень важны. Если в своей работе вы планируете использовать SVN или подобные ей программы, Вам потребуется добавить рабочую папку "Development”, содержащую девелоперские версии папок UTGame.

В UTGameContent вы найдете отличный контент из UT3. Будет лучше, если Вы скопируете этот контент в другое место, так как в ходе этого туториала в нем будет много изменений.

Для своего проекта рекомендуется создавать отдельные папки. Например
* UTGame\Content\ExampleGame\Levels
* UTGame\Content\ExampleGame\UPK
Две директории. Одна для уровней, другая для UPK файлов (и прочего контента). Вам не требуется создавать биллион контентных папок для Вашего проекта. Большинству игр не требуются столько папок. В качестве примера можно использовать наш проект BALL, который состоит из 1.5 гигабайт данных, которые размещены в 20 папках.

UnrealScript

Благодарим Джеймса Тана за примеры UnrealScript файлов, и Маркуса Арвидсона за дополнительную помощь.
Перейдите к директории DevelopmentScr и создайте там новую папку. Для примера – "MyGame”. Имя папки станет именем U файлов. Итак, если ваша игра называется "Bobby” тогда лучшее имя для папки будет "Bobby”. Все unrealscript файлы будут скомпилированы в один U файл, который затем будет использован в игре.
В папке "MyGame” создайте папку Classes, и добавьте три папки из этого архива: MyGameInfo.uc, MyPawn.uc, MyPlayerController.uc
01.jpg


Обращаю Ваше внимание, что это не туториал по unrealscript, поэтому мы проскочим этот шаг достаточно быстро. Основная идея unrealscript состоит в том, что каждый actor имеет свой родительский actor. Младший (child) actor берет на себя все функции и свойства родительского actor’а. Например "class MyPawn extends UTPawn;” – здесь наш новый MyPawn использует UTPawn, как базовый исходник.
Внизу всегда присутствуют "DefaultProperties”. Это свойства и значения, которые будут отображаться в редакторе по умолчанию. Опять же, реальный список свойств гораздо больше, чем в UC файлах которые Вы создали, а Вы должны всего лишь добавить только те свойства, которые отличаются от родительских классов. Если Вы не укажете необходимые параметры в UC файлах, будут использованы данные из родительского класса. Если родительский класс отсутствует или не указан, по умолчанию будет использоваться родитель родителя и так далее. Это древовидная система.

Далее следует компиляция. Для начала мы должны убедиться, что игра узнает о том, что мы добавим в список U файлы. Добавим проверку на новые U файлы. Идем в UTGameConfig и открываем DefaultEngine.ini. Находим секцию "[UnrealEd.EditorEngine]” и добавляем следующую строку "+EditPackages=MyGame” ниже всего, что есть в этой секции.
Вот пример из УДК-ноябрь 2009:

+EditPackages=UTGame
+EditPackages=UTEditor
+EditPackages=UTGameContent
+EditPackages=MyGame

Это очень важно потому, что идет определение, в каком порядке будет происходить загрузка и компиляция.
Данная строка будет постоянно создавать и загружать U файлы в MyGame при запуске редактора. Отключите защиту Read Only, сохраните и закройте файл. Будет хорошей идеей удалить файл UTEngine.ini. Удалив этот файл Вы заставите движок создать новый файл UTEngine.ini на основе DefaultEngine.ini. Если Вы изменяли DefaultEngine.ini, то новый UTEngine.ini будет создан со всеми изменениями, которые Вы внесли.

Далее. Идем в Binaries и запускаем UnrealFrontEnd.exe. Внешний интерфейс является очень важным инструментом, который позволяет сделать целый ряд вещей. В нашем случае, мы будем использовать его для компиляции нашего кода. В верхней панели инструментов жмем на маленькую стрелку, которая находится справа от Make и нажмите Full Recompile.
02.jpg


Если до этого все было сделано правильно, в консоли будет упомянута MyGame, и по окончанию компиляции в папке UTGameScript появится MyGame.u

INI файлы

Откройте UTGame\Config\DefaultGame.ini. Снимите галочку Read Only с файла. Затем откройте файл и найдите секцию "[EngineGameInfo]”.

Замените "DefaultGame=UTGame.UTDeathmatch" на "DefaultGame=MyGame.MyGameInfo".
Замените строку "PlayerControllerClassName=UTGame.UTPlayerController" на "PlayerControllerClassName=MyGame.MyPlayerController"
Сохранитесь. Удалите UTGame.ini и тогда создастся новый инишник, основанный на Вашем модифицированном DefaultGame.ini

Уровень

Идем в BinariesWin32 создаем ярлык для UDK.exe. Добавляем команду "Editor-log”. Для примера "G:\UDK\UDKExampleGame\Binaries\Win32UDK.exe editor -log". Сохраните. Запустите.
Создаем супер простой уровень. Правой кнопкой на BSP Cube. Введите размер 1024 для X,Y и Z и отметьте галочкой Hollow? Далее жмем Build, а затем Add.
03.jpg


Залетаем в куб. Правой кнопкой на полу – Add Actor – Add PlayerStart.
04.jpg


Теперь делаем тоже самое, только добавляем Add Light и перемещаем источник в середину комнаты. Сохраните уровень. Я назвал этот уровень MG-ExampleGameLevel. Префикс очень важен. В файле MyGameInfo.UC – "MG” указывает на тип геймплея. Без этого префикса движок не будет знать, какой тип геймплея используется на этой карте.
Теперь ребилдим уровень. Верхнее меню – Build – Build All.
05.jpg


Идем к верхнему меню. View – World Properties. Разверните WorldInfo и найдите Game Type for PIE. Измените на MyGameInfo.PIE – информатор типа геймплея в режиме тестирования для редактора.
Теперь правой кнопкой на полу – Play From Here и играйте на своем замечательном уровене в этой игре.
06.jpg


Меню

Создайте дубликат текущего уровня. Сохраните его как "ExampleGameFrontEnd”. Теперь создадим сцену для пользовательского интерфейса (UI Scene). Для этого, создадим наш первый пак. Идем в контент браузер, правой клавишей мыши на пустом простанстве, выбираем New. Заполняем поля Package и Name. В качестве основы (Factory) выставляем UIScene. Жмем ОК. После создания дважды кликаем на иконку только что созданной иконки меню.

Правой клавишей в любом месте на пространстве редактора UI сцены – Place Widget – Button (Standart). Изменяйте размер до тех пор, пока края кнопки не окрасятся в зеленый цвет.
Самое время что нибудь сделать используя Кизмет. На самом деле это не очень правильный способ. Правильнее было бы сделать кнопку через Unrealscript (как описано в туториале "Кодовый замок"). Однако кизмет работает также хорошо, но при этом в нем работать гораздо легче.
Итак, щелкните правой кнопкой мыши на иконке и выберите UnrealKismet Editor.
08.jpg


В открывшемся редакторе (Global Sequence) , add New Event – UI – On Click и New Action – Level – Activate Level Event.
09.jpg


И теперь соединяем
10.jpg


В Activate Level Event, добавляем уникальное имя события. Я назвал "OpenYourLevel”. Теперь, нажимая на кнопку, пользователь будет запускать какое либо событие. Уровень будет использовать это событие, искать его в собственном кизмете на соответствие Event Name и запускать все события, что подключены к нему. В нашем случае, это была консольная команда для загрузки следующего уровня. Как вы можете видеть, это весьма "топорно". UnrealScript чище, но гораздо труднее.

И еще одна вещь, прежде чем мы закончим с этой UI сценой. Кликните на пустом простанстве для вызова свойств UI сцены. Выбираем Flags – Pause Game While Active. Отключите это. Это отключит кизмет-скрипт при старте, да и вообще игра будет стоять на паузе.

Сохраните Ваш пак. Пак должен быть сохранен или изменения, которые Вы внесли будут потеряны! Сохраните его в папке, которую Вы сделали. В моем примере это UTGame\Content\ExampleGame\Content\UPK

Теперь подключим Ваше событие к уровню. Откройте Level Kismet (зеленая K на верхней панели инструментов), и где нибудь на пустом месте add New Action – UI SceneS – Open Scene. Соедините его с Level Startup (New Event – Level Startup). И add the UI Scene, которые Вы добавили в свойства Open Scene.

Дополнительная информация: Level Startup автоматически переименуется в Level Loaded при следующем открытии редактора. Для информации: спокойно используйте New Event – Level Loaded в будущем.
12.jpg


Add New Event - Remote Event, и New Action - Misc - Console Command. В Remote Event, добавьте то же самое имя в Event Name, что мы ввели для кнопки, "OpenYourLevel" в моем примере. В Console Command добавьте новую команду (если нет поля ввода [0] в Commands, то нажмите на зеленый крестик) "open MG-examplegamelevel" (команда open, после пробел не забудьте далее имя уровня, открывает карту) - или имя Вашего игрового уровня (аналогично делается переход между картами). Консольная команда будет выполнена, когда будет нажата кнопка.

Теперь добавьте Action - Toggle - Toggle Cinematic Mode, и переменную Variable - Player - All Players и сцепите их как на скриншоте.

Все сделано! Проверьте. Но редактор не выполнит команду "open". Поэтому запустите этот уровень на PC (джойстик с экраном, рядом с простым джойстиком).

Локализация

Файлы локализации содержат в себе весь текст игры. Для смены языка игры, все что Вам нужно, это переключить игру на использование другого языкового файла. Все необходимое содержится в папке Licalization. Мы настроим очень просто INT файл "International” с двумя строками текста.
Я конечно же, удалил текущие файлы INT из директории Licalization и начал все с нуля. Это лишит Вас возможности играть в UT3 Demo, так что если Вы планируете запускать или как либо еще использовать это демо – либо не делайте этого, либо сохраните данную папку в другом месте. Прежде всего, закройте редактор. Редактор обнаруживает INT файлы при запуске, но не обновляет их наличие или изменения в реальном времени.
Создайте TXT файл и переименуйте его в "MyGame.int”. Затем добавьте в документ:

[ExampleOfASection]
01 = Название кнопки запуска
02 = Для начала нажмите кнопку

Слова в скобках помогают определить секцию. 01 и 02 помогают определить направления в этом разделе.
Снова откройте редактор. Откройте Ваш уровень и пак интерфейса. Откройте UI Scene, которую Вы недавно создали. Нажмите правой клавишей мыши – Place Widget – Label [Standart], а затем сделайте это еще раз, потому что нам нужно 2 таких виджета. Поместите их куда нибудь и нажмите на один из них. В верхнем правом углу обратите внимание на свойства. Перейдите к Data – Data Source – Mark Up String.
13.jpg


Введите "strings:mygame.ExampleOfASection.01" (заключите это выражение в значки больше меньше, как на скриншоте, движок этого сайта, понимает их как таг, поэтому не отображаются <>) в поле Mark Up String.
Здесь ИмяФайла.ИмяСекции.ИмяСтроки.

Ini файлы

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

Откройте DefaultEngine.ini – секция [URL]

MapExt=Udk – Вам нет необходимости это редактировать, но если Вы хотите сменить расширение уровня, здесь это сделать очень легко.
Map=UTFrontEnd.udk – Смените на ExampleGameFrontEnd. Это откроет Ваше меню на уровне по умолчанию.
LocalMap=UTFrontEnd.udk – аналогично.

Секция [Engine.PackagesToAlwaysCook], добавьте "+Package=ExampleGameFrontEnd". Это для постоянного обновления файлов игры.

Секция [Engine.StartupPackages], добавьте "+Package=MyGameInterface". Благодаря этому игра будет постоянно загружать данный пак. Обращаю Ваше внимание, что все паки сюда добавлять не нужно. Имеет смысл добавить только паки с файлами интерфейса, так как они загружаются в первую очередь.

Секция [Engine.PackagesToForceCookPerMap], добавить ".Map=ExampleGameFrontend", сопровождаемый ".Package=MyGameInterface." Загружает эти паки на уровень и только на этот уровень. Но опять же. Это в основном наши паки интерфейса. Иногда, с загрузкой обычным способом могут возникать проблемы. Эти команды помогут загрузить наши паки первыми. (все остальное подгружать при загрузке уровня)

Секция опций [FullScreenMovie]. Данная команды, который будут в этом разделе, запустятся самыми первыми, например сюда вставляют заставку игры.

Мы закончили! Удалите UTEngine.ini опять, для того что бы применить Ваши изменения в DefaulEngine.ini
Запустите игру и убедитесь, что Ваш уровень загружается, также убедитесь, что нажатие кнопки загружает Ваш уровень.

Кукинг (Cooking)

Очень несерьезное название для серьезного процесса. Кукинг – это финальная компиляция Вашего проекта. Делает Ваш проект готовым для потребителя.
Кукинг комбинирует все Ваши контентные паки в несколько файлов. Этот процесс к тому же, призван защитить Ваш контент. по крайней мере очень трудно – извлечь контент из запакованных файлов.
Для начала процесса, откройте UnrealFrontEnd.exe. В левом верхнем углу закладка Cooking. Далее выберите все карты для кукинга в Maps To Cook. Напишите там имя уровня: "MG-ExampleGameLevel". Запомните, Вы уже установили AlwaysCook в INI файл.
14.jpg


Далее нажмите Cook на верхнем тулбаре.
После того, как все будет готово, будет создана папка UTGame\CookedPC. Контент в этой папке можно доставлять пользователю.

Упаковка

В UnrealFrontEnd.exe, кликните на Package Game и введите имя Вашей игры. После нескольких минут посмотрите в корневую директорию. Там Вы найдете несколько паков игры с инсталлятором. Вы закончили!

Устранение неполадок.

- Убедитесь, что Вы нигде не сделали "очепяток".
- Вы не должны изменять INI файлы во время игры или когда запущен редактор. Если Вы все таки сделали это, вероятно, внесенные изменения потеряны.
- Убедитесь, что у Вас есть скомпилированный U файл в UTGameScript
- Поймите, что удобнее и эффективнее использовать простые и уникальные имена для файлов. Пробелы в именах, нестандартные символы а так же дублирование имен файлов следует избегать любой ценой. Unreal не видит разницы между уровнем Doghouse.udk и содержанием пака Doghouse.udk. Он не видит расширения фалов! Все имена должны быть уникальными!
- Запустите игру с параметром "-log” или проверьте UTGameLogs’Launch.log и прочитайте это. Если игра зависает при загрузке, попробуйте найти, где она началась загрузка и поищите баги.
- Ваш уровень назван "MG-NameOfYourLevel”. Префикс очень важен, как упоминалось выше.
- Если во время компиляции UC файлов, Вы получите "Superclass Errors” значит Вы поместили строку "+EditPackages=MyGame" в неправильное место. Место важно, он должен быть внизу списка в ini файле.

По материалам rusut.ru
Вложения
mygame.zip
(1.21 КБ) 431 скачивание


ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Вернуться в «Конструктор UDK»

 

 

cron