Cold Storm UT3 Unreal Tournament 3 UT2004 UT2K4 Unreal Tournament 2004 Тукей UT99 UT Classic Unreal Tournament Unreal tournament 99 Unreal Tournament Classic Unreal Engine 3 Unreal Engine 2 Unreal Engine 1 UDK UDK2009 UDK2010 UDK2011 Unreal Editor Уроки UDK на русском Скачать evil god Unreal Legends
Меню сайта
Категории раздела
Основное [1]
Основа, самое начало
Освещение [0]
Свет, освещение, прожектора и т.д.
Геометрия [0]
Браши, бсп, геометрия уровня
Текстуры [0]
Импорт, редактор текстур
Kismet [0]
Описание этой технологии в UDK
Прочее [2]
Что не входит в другие разделы
Чат
300
Опрос
Оцените мой сайт
Всего ответов: 34
LiveInternet
Главная » Статьи » UDK » Прочее

Система сохранения для игр RPG
Обзор

Конфигурация системы Unreal Engine довольно мощная и зачастую требует сохранения многих переменных. Эта статья представляет собой метод создания системы сохранения игр для RPG, созданных на UDK.
Система сохранения игры будет использовать систему хранения пользовательского интерфейса (UI DataStore System) и директивы PerObjectConfig.
Предполагается, что читатель знаком с конфигурационными файлами UDK и синтаксисом C#
Sapitu

Sapitu (Savegames Are Possible In The UDK/Возможность сохранения игры в UDK) реализует простую систему для сохранения игр жанра RPG. Он обладает способностью сохранять персонажа и его инвентарь.
Вы можете скачать полный исходный код этого примера вот тут .
Sapitu делится на 4 класса. Программа также содержит 2 дополнительных класса: SapituGame и SapituPC, используемые только для игр с внедренной системой Sapitu.
Четыре класса Sapitu заключаются в следующем:

Sapitu - это основной класс, который управляет различными частями системы сохранения игр.
SapituCharacter - этот класс хранит информацию о персонаже.
SapituInventory - этот класс предмета инвентаря, который может принадлежать к SapituCharacter.
SapituItem - этот класс используется в качестве базы данных для создания записи SapituInventory. Экземпляры этого класса предназначены только для чтения в рамках системы.

Класс Sapitu

Этот класс определяет какой-либо метод для управления, сохранения и загрузки новых символов. Он также содержит методы для создания новых предметов инвентаря и сохраняет ссылку на них в базы данных.

База данных

Метод loadItemDB инициализирует базу данных SapituItem и является частью системы хранения пользовательского интерфейса в Unreal Engine. Эта система также используется для получения информации о типах игры, карты, и оружии в UDK.
Метод getItem предоставляет средство для поиска фактических SapituItem (например, в текущей базе данных имя объекта (Object.name свойства). Это имя (точнее, идентификатор) является лишь программным именем.
База данных используется в системе инвентаризации, чтобы найти статичные предметы инвентаря (точнее ссылку на них).
Персонаж

Класс Sapitu является опорной точкой при сохранении и загрузке SapituCharacter.
Метод getCharacters возвращает список всех зарегистрированных на персонаже идентификаторов. Так же, как идентификатор элементов базы данных он относится к свойству Object.name (еще раз напомню, это не удобное читаемое в игре имя, а внутренний идентификатор!). Этот идентификатор необходим во время загрузки или сохранения персонажей. На ИД есть одно важное ограничение - он не должен содержать пробелов, только буквы в диапазоне [Aa-Zz] и цифры. Могу посоветовать давать им понятные имена, чтобы потом не запутаться.
Загрузка и создание символов, на самом деле похожие процедуры. Обе они используют следующий код:

myChar = new(none, "MyCharId") class'SapituCharacter';

Второй параметр, собственно, определяет название создаваемого/загружаемого объекта.
Для того чтобы провести четкое различие между загрузкой и созданием новых символов в Sapitu, мы сначала проверяем, существует ли данный идентификатор, а затем, соответственно, принимаем или возвращаем значение. Если объяснять понятней, то при загрузке мы принимаем при существующем ИД, а при сохранении возвращаем при отсутствующем ИД.
Загрузка персонажа еще не закончена, это только начало. Нам также необходимо инициализировать его инвентарь. SapituCharacter хранит список идентификаторов для SapityInventory items (SapituCharacter.inventoryRecord).

Инвентарь. Создание предметов

Предметы инвентаря создаются специальным образом. CreateInventory – это способ создать новый элемент инвентаря на основе данных SapituItem. Он создает уникальный идентификатор для инвентаря, а затем выполняет специальную конструкцию new(none, inventoryId) class'SapituInventory' . После этого будут загружаться различные переменные, которые были не определены SapituItem (например, как уровень, вес и стоимость).
Класс SapituCharacter

Этот класс определяется как:

class SapituCharacter extends Object config(Sapitu) perobjectconfig;

Это означает, что некоторые из переменных в классе будут сохранены в файле конфигурации UTSapitu.ini, и что для каждого объекта будет создан отдельный раздел. Последние является результатом работы директивы класса perobjectconfig. Имя объекта имеет важное значение при сохранении, например, потому что оно определяет название раздела.
Этот класс хранит различные конфиги переменных для имени персонажа (уже понятного для человека имени, а не ИД), здоровья и т.д.
Инвентарь персонажа сохраняется иным способом. Добавление и удаление предметов инвентаря должно быть сделано с помощью методов addInventory и removeInventory. Этот способ позволяет обновить массивы inventory и inventoryRecords. Массив inventory не может быть изменен непосредственно. Класс Sapitu запрещает это, но это особый метод.
Вы не можете принимать значения из SaveConfig, потому что инвентарь не сохранится должным образом. Метод save перебирает массив инвентаря и принимает значения SaveConfig. Таким образом, все, что относится к персонажу сохраняется правильно.

Класс SapituInventory

Этот класс является фактически самим инвентарем. Он основан на классе SapituItem. Работа с этим классом такая же, как и с SapituCharacter.
SapituItem

В отличие от классов SapituCharacter и SapituInventory этот класс является подклассом UTUIResourceDataProvider. Он не объявляется, как config , потому что в родительском классе уже определена его конфигурация (объявлялось при помощи PerObjectconfig).
Также обратите внимание на bSearchAllInis=true в разделе defaultproperties. Эта переменная является частью системы хранения пользовательского интерфейса. Она определяет, что система хранения должна пройти через все файлы конфигурации, чтобы найти объекты.
Загрузка SapituItems не должна быть сделана на основе ранее упомянутой конструкции new(none,id). Чтобы получить все объявленные SapituItem, Вы должны использовать следующий код:

class'UTUIDataStore_MenuItems'.static.GetAllResourceDataProviders(class'SapituItem', ProviderList);

SapituItems объявляются вручную, путем добавления строки вроде этой:

[Sword1 SapituItem]
DisplayName = Короткий меч // Видимое имя
level=(min=1,max=10) // Уровень
weight=(base=10,levelMult=0.5) // Вес
value=(base=5,levelMult=1) // Значение

См. файл UTGameConfigSapituItemDB.ini для просмотра дополнительных примеров.

Примечания

Отметим также, что сохранение игры происходит в виде простого текста. Позаботьтесь о возможном читерстве. Так что лучше использовать сохранение в бинарный файл (двоичный код). Конечно от «про» это не спасет, но от лишних глаз будет подальше.
Игра с Sapitu

Чтобы играть с этой системой, просто скомпилируйте исходник и начните игру со следующим параметром:
udk examplemap?game=sapitu.sapitugame

Класс SapituPC определяет команды, вводимые в консоли:

* createChar
* saveChar
* loadChar
* printChars
* showChar
* createRandomItem
* createItem
* pickupItem
* pickupAll
* findItems
* listItemTypes

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

Источник: http://Unreal-level.ru

Категория: Прочее | Добавил: Felix (22.03.2011)
Просмотров: 1095 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Профиль
Понедельник
22.01.2018
12:55


Привет, Гость !
Поиск
Друзья
Статистика
Cold Storm UT3 Unreal Tournament 3 UT2004 UT2K4 Unreal Tournament 2004 Тукей UT99 UT Classic Unreal Tournament Unreal tournament 99 Unreal Tournament Classic Unreal Engine 3 Unreal Engine 2 Unreal Engine 1 UDK UDK2009 UDK2010 UDK2011 Unreal Editor Уроки UDK на русском Скачать evil god Unreal Legends
Copyright ColdStorm © 2010-2018