|
| |||
|
| |||
| |
Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология. |
|
Creating HUD
автор: PROOF | 25 Февраля 2010 | Просмотров: 13299
Способ 1.
Создаем HUD, с помощью материала...
Автор: PROOF
В этом уроке я покажу, как же все таки создать свой HUD(на примере панели, отображающей кол-во жизней)
Что нам для этого потребуется:
Ессесно сам UDK...
Adobe Photoshop (можно использовать любой другой графический редактор)
Вами должен уже быть выполнен урок 'Creating an UDK Game' ...
Итак начнем...
Откройте Adobe Photoshop...Создайте новый документ(размер роли не играет)...У меня это - 256Х128...
И набросайте то, что хотите видеть в роли своего HUD...
Вот примерно то, что сделал я
P.S. изображение должно быть максимально подогнано под размер холста...
P.S.S. изображение делаем черно-белым...это будет альфа-маской...
![]() Сохраняем в *.TGA
Создаем еще один документ у меня это (128Х128)
![]() Тоже сохраняем как *.TGA...
Можете закрыть Photoshop.
Открываем УДК, импортируем полученные нами текстуры...
Начинаем создавать материал...
В общих настройках материала только в Blende Mode выставлем BLENDE_Masked, больше ничего не трогаем...
Создаем New Scalar Parameter, и присваиваем ему имя 'Health' (этот параметр мы будем изменть с помощью скрипта)...
![]() Создаем новую 'Constant' и присваиваем значение 0.005000( это тоже по своему параметр...т.к. принято в материалах использовать значения от 0 до 1, а у нас кол-во жизней равно 100...Вот с помощью константы мы делим значение, на которое будет увеличиваться параметр...Т.е. 10 будет равно 0.1, 30 = 0.3 и т.д)
Создаем 'Multiply' и цепляем наши параметры...
Создаем 'TexCoord' . Т.к. у нас обе текстуры одинаковые по высоте, нам придется растянуть вторую по оси Y в 2 раза...Для этого я выставил значение VTiling = 0.5, Coordinft Index = 1...Так же Tex Coord способствует смещению тектстуры...
Создаем 'Add' и цепляем к нему 'Multiply' и 'TexCoord'...
Создаем 'Texture Sample' в него помещаем нашу вторую текстуру...И к его 'UVs' цеплем 'Add'
И это все дело цепляем к 'Emissive'
Все, материал готов...Сохраняем его....Далее на нем ПКМ и выбираем 'Create New Material Instance (Constant)....
Открываем новый материал, раскрываем вкладку SetScalarParameterValues и ставим галочку на Health...
Можете пока закрыть UDK...
Вот и дошло лело до скрипта...Не переживайте, в данном случае он очень маленький...
В папке с вашим проектом(подразумевается что урок 'Creating an UDK Game' вами выполнен) создайте новый скрипт. У меня это MyHUD.uc
В вашем классе Game, в разделе defaultproperties, добавьте строку HUDType=class'MyHUD'
Содержание MyHUD.uc
class myHUD extends UTHUD; // класс var MaterialInstanceConstant Mat01; // объявляем переменную, которая будет являться нашим материалом function DrawGameHud() {
if (Mat01 != None) { Canvas.DrawMaterialTile(Default.Mat01, 200, 100); // собственно - это и есть рисование текстуры, и положение его на экране Mat01.SetScalarParameterValue('Health', PlayerOwner.Pawn.Health); // говорим движку, что значит наш параметр 'Health' } super.DrawGameHud(); // данная строка означает, что на экран будет выводиться и старый HUD // удалите ее, чтобы видеть на экране только созданный HUD
} defaultproperties { // Mat01=MaterialInstanceConstant'путь до вашего материала'
Mat01 = MaterialInstanceConstant'NewHUD.Materials.Health_Mat_INST' // говорим двигу, что из себя представляет наша переменная... // т.е. это и есть сам материал
} Компилируем, и смотрим что у нас получилось...
Способ 2.
Создаем HUD, с помощью скрипта.
Перевод: PROOF
Введение:В этом маленьком учебнике, я покажу как создать свой HUD в UDK. Я предполагаю что вы уже знакомы с основами программирование на этом движке( Настройка проекта, компиляция). I - размещение файловВ этом примере мы разместим наши классы в папке «UDK // UDK-XXXX-XX // Development // Src // MyFolder // Classes». II - класс "MyGame"Для начала, прежде чем мы создадим HUD, нам необходимо определить "Game" класс, чтобы использовать новый HUD. Чтобы сделать это, измените основные свойства вашего класса "Game", или создайте новый класс: ****************************** class MyGame extends UTGame
config (MyGame);
defaultproperties
{
HUDType= class 'MyFolder.MyHUD'
}
******************************
Зная, что наш HUD класc называется "MyHud", мы указываем ссылку на него, в настройках по умолчанию нашего класса "Game". III - класс "MyHud"Я начну с описания переменных и функций, которые я использую в классе MyHUD. Это позволит Вам сделать кучу вещей. Вы также можете взглянуть на класс "Canvas", если вы хотите узнать больше!
Canvas.Font = class'Engine'.static.GetSmallFont();
Canvas.Font = class'Engine'.static.GetMediumFont();
Canvas.Font = class'Engine'.static.GetLargeFont();
Таким образом я закончил представлять Вам главные функции. Вы должны знать, что эти функции находятся не в разделе класса "HUD", а в атрибутах класса "Canvas" (вы наверное уже это заметили). Это потребует постоянного вызова "Canvas.TheFunction ()". Подводя итог, мы можем создать наш основной класс HUD: ******************************
class MyHUD extends UTHUD;
function DrawGameHud() { // Canvas.TheFunction () } defaultproperties { } *******************************
"DrawGameHud ()" - функция описывающая непосредственно рисование HUD на экране монитора. Например, как принято во всех учебных пособиях по программированию, мы выведем на экран простой текст "Hello World" по центру экрана, для этого напишем такой класс: ****************************** class MyHUD extends UTHUD;
function DrawGameHud() { Canvas.SetPos(Canvas.ClipX/2,Canvas.ClipY/2); Canvas.SetDrawColor(255,255,255,255); Canvas.Font = class'Engine'.static.GetMediumFont(); Canvas.DrawTextCentered("Hello World"); } defaultproperties { } *********************************
IV - ПримерТак, теперь, когда мы с Вами все разобрали, попробуем сделать такой статус бар: ![]() Наш бар имеет:
собственно function DrawBar() - функция описывающая наш статус бар:
Чтобы вывести на экран два статус бара с кол-вом жизней и патронов, напишем такой скрипт:
*********************************
function DrawBar(String Title, float Value, float MaxValue,int X, int Y, int R, int G, int B)
{ local int PosX,NbCases,i; PosX = X; // позиция где должен "рисоваться" следующий прямоугольник NbCases = 10 * Value / MaxValue; // Количество активных прямоугольников, которые можно вывести на экран i=0; // Число прямоугольников, уже "нарисованных / * Отображает активные прямоугольники * / while(i < NbCases && i < 10) { Canvas.SetPos(PosX,Y); Canvas.SetDrawColor(R,G,B,200); Canvas.DrawRect(8,12); PosX += 10; i++; } / * Отображает неактивные прямоугольники * / while(i < 10) { Canvas.SetPos(PosX,Y); Canvas.SetDrawColor(255,255,255,80); Canvas.DrawRect(8,12); PosX += 10; i++; } / * Вывод названия * / Canvas.SetPos(PosX + 5,Y); Canvas.SetDrawColor(R,G,B,200); Canvas.Font = class'Engine'.static.GetSmallFont(); Canvas.DrawText(Title); } function DrawGameHud()
{ if ( !PlayerOwner.IsDead() && !UTPlayerOwner.IsInState('Spectating')) { DrawBar("Health",PlayerOwner.Pawn.Health, PlayerOwner.Pawn.HealthMax,20,20,200,80,80); DrawBar("Ammo",UTWeapon(PawnOwner.Weapon).AmmoCount, UTWeapon(PawnOwner.Weapon).MaxAmmoCount ,20,40,80,80,200);
}
} defaultproperties { } **************************************
И результат: ![]() #1 написал: M1reX45 1 Марта 2010 07:37 | ICQ: Не Указано |
#2 написал: eXsisteNz 1 Марта 2010 11:10 | ICQ: 616837370 |
#3 написал: smitt 1 Марта 2010 16:55 | ICQ: 358667420 |
#4 написал: FACH 1 Марта 2010 18:52 | ICQ: 562039160 |
#5 написал: PROOF 1 Марта 2010 19:04 | ICQ: 6668742 |
#6 написал: Artmancarver 14 Марта 2010 06:29 | ICQ: Не Указано |
#7 написал: Games-Territory 24 Апреля 2010 02:37 | ICQ: Не Указано |
#8 написал: smitt 24 Апреля 2010 14:01 | ICQ: 358667420 |
#9 написал: tahiro777 13 Мая 2010 11:22 | ICQ: Не Указано |
#10 написал: FACH 13 Мая 2010 11:56 | ICQ: 562039160 |
#11 написал: Omny 19 Июля 2010 17:29 | ICQ: Не Указано |
#12 написал: FACH 19 Июля 2010 21:08 | ICQ: 562039160 |
#13 написал: Geroll 30 Января 2011 17:47 | ICQ: Не Указано |
#14 написал: FACH 30 Января 2011 18:36 | ICQ: 562039160 |
#15 написал: bs1 8 Февраля 2011 21:06 | ICQ: Не Указано |
#16 написал: bs1 7 Марта 2011 20:08 | ICQ: Не Указано |
#17 написал: FACH 7 Марта 2011 20:27 | ICQ: 562039160 |
#18 написал: bs1 10 Марта 2011 19:36 | ICQ: Не Указано |
#19 написал: FACH 10 Марта 2011 20:19 | ICQ: 562039160 |
#20 написал: A-Lex 6 Августа 2011 16:34 | ICQ: Не Указано |
#21 написал: Fitil_san 27 Марта 2012 15:40 | ICQ: 412082434 |
#22 написал: FACH 27 Марта 2012 20:05 | ICQ: 562039160 |
#23 написал: Fitil_san 27 Марта 2012 22:41 | ICQ: 412082434 |
#24 написал: FACH 7 Апреля 2012 22:12 | ICQ: 562039160 |
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...
|
|
|
При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна! © 2008—2012, UNREAL-LEVEL.RU. Все права защищены. |