Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Coded lock
автор: FACH | 30 Ноября 2009 | Просмотров: 5439
Автор: FACH

Необходимые знания:
Базовые знания по строительству (комната, освещение, добавление различных мешей)
IU Scene
Kismet
UScript
Matinee

Начнем с простого кода

Нам нужен собственный класс сцены, тут Object->UIRoot->UIScreenObject->UIScene->UTUIScene->UTUIFrontEnd->UTUIFrontEnd_BasicMenu. (путь разве такой??) Чтобы его создать, нам нужно написать простенький, для начала, скрипт. Откройте Блокнот и впишите туда такие строки:

// Tipo script
class CodeMenu extends UTUIFrontEnd_BasicMenu;
DefaultProperties
{
}


Сохраните данный документ с расширением ".uc" (например CodeLock.uc). Теперь нам нужно его "откомпилить". Для этого поместите этот файл в папку My DocumentsMy GamesUnreal Tournament 3UTGameSrcCodeLockClasses, затем в конфигах, откройте файл UTEditor.ini, найдите раздел [ModPackages], в конце впишите ModPackages=CodeLock, сохраните, закройте. Далее запустите редактор. Запустится компиляция, а не редактор, так что не пугаться при виде такого окошка (нажать на "Да"):

Coded lock


Если ошибок нет, то в папке My DocumentsMy GamesUnreal Tournament 3UTGameUnpublishedCookedPCScript, будет файл CodeLock.u. Все!
Теперь откроем редактор. В ActorClasses нажмем File-Open и загрузим наш свежеиспеченный скрипт. 
В своем паке, в главном браузере, создаем новую IU сцену и настраиваем ее как на картинке ниже:

alt


Создаем панель управления замком, например такую:

Coded lock


Необходимо назначить Таги кнопкам, чтобы потом мы могли их описать в скрипте (на примере кнопка "0" с тагом Button_0).

Теперь самое интересное СКРИПТ.

Все, что будет влиять на геймплаей от сцены
мы должны соответственно описать в скрипте кодом (как в Delphi, т.к. я не работал с Си, у меня ассоциации только с Паскалем).
Итак у меня 12 кнопок. Скрипт для них будет выглядеть так:

// Za takimi chertochkami pishetsia kommentariy
// on He uchitivaetsia kodom
//---------------------------------
// CodeLock

class CodeMenu extends UTUIScene;

var transient UTUIPressButton But_0;
var transient UTUIPressButton But_1;
var transient UTUIPressButton But_2;
var transient UTUIPressButton But_3;
var transient UTUIPressButton But_4;
var transient UTUIPressButton But_5;
var transient UTUIPressButton But_6;
var transient UTUIPressButton But_7;
var transient UTUIPressButton But_8;
var transient UTUIPressButton But_9;
var transient UTUIPressButton But_OK;
var transient UTUIPressButton But_HE_OK; //Imia peremennoi luboe

Event PostInitialize()
{

//Nahodim knopki 

Super.PostInitialize(); 

But_0 = UTUIPressButton( FindChild('
Button_0',true)); //Eto est Tag
But_0.OnClicked = Vvod_0; // Vizov funtion
But_1 = UTUIPressButton( FindChild(
'Button_1',true));
But_1.OnClicked = Vvod_1;
But_2 = UTUIPressButton( FindChild('
Button_2',true));
But_2.OnClicked = Vvod_2;
But_3 = UTUIPressButton( FindChild('
Button_3',true));
But_3.OnClicked = Vvod_3;
But_4 = UTUIPressButton( FindChild('
Button_4',true));
But_4.OnClicked = Vvod_4;
But_5 = UTUIPressButton( FindChild('
Button_5',true));
But_5.OnClicked = Vvod_5;
But_6 = UTUIPressButton( FindChild('
Button_6',true));
But_6.OnClicked = Vvod_6;
But_7 = UTUIPressButton( FindChild('
Button_7',true));
But_7.OnClicked = Vvod_7;
But_8 = UTUIPressButton( FindChild('
Button_8',true));
But_8.OnClicked = Vvod_8;
But_9 = UTUIPressButton( FindChild('
Button_9',true));
But_9.OnClicked = Vvod_9;
But_OK = UTUIPressButton( FindChild('
Button_OK',true));
But_OK.OnClicked = Vvod_OK;
But_HE_OK = UTUIPressButton( FindChild('
Button_He_OK',true));
But_HE_OK.OnClicked = Vvod_Cancel;
}

function bool Vvod_0(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_0'); //Aktiviruet Remote event v Kismet
return true;
}
function bool Vvod_1(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_1');
return true;
}
function bool Vvod_2(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_2');
return true;
}
function bool Vvod_3(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_3');
return true;
}
function bool Vvod_4(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_4');
return true;
}
function bool Vvod_5(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_5');
return true;
}
function bool Vvod_6(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_6');
return true;
}
function bool Vvod_7(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_7');
return true;
}
function bool Vvod_8(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_8');
return true;
}
function bool Vvod_9(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_9');
return true;
}
function bool Vvod_OK(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_OK');
return true;
}
function bool Vvod_Cancel(UIScreenObject InObject, INT InPlayerIndex)
{
ActivateLevelEvent('n_Cancel');
return true;
}

DefaultProperties
{
}


Вот скрипт, для простенькой UI-шки.

А теперь Кизмет!

Открываем Кизмет. Там (так, тут надо скрипт воткнуть перед этим? вроде да, посмотрим) ставим Remote Even и вписываем в строку EventName  n_0. Этот блок будет выдавать сигнал при нажатии на сцене кнопки 0. Чтобы UI сцена открылась, я сделал триггер в панели, на который нужно нажать кнопкой "E", но чтобы не могли одновременно нажать несколько игроков, я дописал некий контроль с триггерной зоной. Когда игрок войдет (это для многопользовательской игры) в зону триггер волюма, триггер панели будет доступен только этому игроку, т.е. еще кто-то нажать не сможет, но и если этого игрока убьет кто-нибудь, то живому игроку нужно будет выйти, сначала, из триггер волюма, чтобы контролировался другой игрок. В итоге сцена у пульта такая:

Coded lock


У меня будет случайный четырехзначный код, у которого, вроде, 1 048 576 комбинаций в десятичной системе счисления. Так что, где-то надо будет сказать пароль. Чтобы особо не заморачиваться на этот счет, я создам триггер, при активации которого, код будет выведен на экран.
Итак мой мини Кизмет скрипт:

Coded lock

Coded lock


Сохраняю, раздаю, делайте, сверяйтесь, глупости на форуме не пишите, аахриневайте, чет я задолбался...

cookedpc.zip - 2.11 Мб (Скачиваний: 340).

В примере ScorpyX, ввод цифр преобразуется в одно четырехзначное число, что намного сокращает код. Рекомендую ознакомится. Также в конце сцены, небольшая интересная сценка (машинима).

dm-code.zip - 7.24 Мб (Скачиваний: 411).
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1 написал: ScorpyX
28 Ноября 2009 19:02 | ICQ: 333879808 |


Группа: Активист
Регистрация: 13.08.2009
Sssssssweet.


--------------------
Публикаций: 0 | Комментариев: 45      
#2 написал: Droid1995
28 Ноября 2009 19:10 | ICQ: Не Указано |


Группа: Гости
Регистрация: Не Указано
Спасибо я бы сам замучился методом тыка делать. drinks
Публикаций: 0 | Комментариев: 0      
#3 написал: aizekg
28 Ноября 2009 21:22 | ICQ: Не Указано |


Группа: Гости
Регистрация: Не Указано
Спасибо! smile
Публикаций: 0 | Комментариев: 0      
#4 написал: FACH
28 Ноября 2009 22:48 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
В кизмет есть куча всяких контроллеров кнопок и картинок, т.е. в этом примере, можно было скрипт и не использовать, но кизмет - это скрипт "на время разработки", все действия, наверное, лучше писать в Си


--------------------
Публикаций: 134 | Комментариев: 778      
#5 написал: ScorpyX
30 Ноября 2009 15:23 | ICQ: 333879808 |


Группа: Активист
Регистрация: 13.08.2009
don't mind if i do..

ps. thx for ending Fach


--------------------
Публикаций: 0 | Комментариев: 45      
#6 написал: FACH
30 Ноября 2009 16:26 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
ScorpyX, ты глянь на сценку в конце
и у тебя недочет один был
Рандом надо было ставить от 1000 до 9999, а то мне две цифры показало раз

ScorpyX, помнишь мы говорили в 3Д и подключением УИшки по приближению карты к объекту, тут МБ косяк с разрешением. УИшку придется настроить, чтоб она была на весь экран, в итоге получается, что весь объект нужно приближать по максимуму, что не хорошо, придется брать текстуры высокого разрешения.


--------------------
Публикаций: 134 | Комментариев: 778      
#7 написал: Collide
30 Ноября 2009 23:05 | ICQ: Не Указано |


Группа: Активист
Регистрация: 6.11.2009
Интересный вопрос... а когда выложат мой перевод статьи UI Editor User Guide?
Уже 2 дня прошло? Неужели так трудно этим огромным кускам текста оформление))
Может быть надо быть "Добавить новость" через движок сайта и с оформлением? А админ или модератор бы просто отмодерировал...


--------------------
Публикаций: 4 | Комментариев: 39      
#8 написал: FACH
30 Ноября 2009 23:24 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Блин, у меня работы... и 2 тутора добавить, 1 доделать, 2 допереводить. Это не говоря, об университете. Погодь, все будет, это не так важно. Лучше добавлять на сайт, конечно, я потом отредактирую


--------------------
Публикаций: 134 | Комментариев: 778      
#9 написал: Collide
30 Ноября 2009 23:30 | ICQ: Не Указано |


Группа: Активист
Регистрация: 6.11.2009
Я пожалуй выпущу небольшой патч на свой перевод) Заметил тут несколько несоответствий в начале и в конце перевода. Получилось что от начала к концу перевод становится лучше... В начале куча опечаток... Короче сейчас подправлю и добавлю как новость, быстрее будет)


--------------------
Публикаций: 4 | Комментариев: 39      
#10 написал: FACH
30 Ноября 2009 23:34 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
давай, я завтра вечером отмодерю


--------------------
Публикаций: 134 | Комментариев: 778      
#11 написал: ScorpyX
1 Декабря 2009 02:18 | ICQ: 333879808 |


Группа: Активист
Регистрация: 13.08.2009
если говорить о числе для пароля меньше 1000
то нужно наверное переводить в текст и добавлять нули
если число 100-999 то один 0 вперени
если число 10-99 то два 0 впереди
ну и если число 0-9 то три 0 впереди

код то все равно работать будет )
например 0070


--------------------
Публикаций: 0 | Комментариев: 45      
#12 написал: FACH
1 Декабря 2009 05:11 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
это понятно, что будет, но нужно чтоб выводилось 4-ре числа


--------------------
Публикаций: 134 | Комментариев: 778      
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...






При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна!
© 2008—2012, UNREAL-LEVEL.RU. Все права защищены.