Здравствуйте. Вы находитесь на сайте 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. изображение делаем черно-белым...это будет альфа-маской...

alt

Сохраняем в *.TGA

Создаем еще один документ у меня это (128Х128)

alt

Тоже сохраняем как *.TGA...
Можете закрыть Photoshop.

Открываем УДК, импортируем полученные нами текстуры...
Начинаем создавать материал...

Creating HUD


В общих настройках материала только в Blende Mode выставлем BLENDE_Masked, больше ничего не трогаем...

Creating HUD


Создаем New Scalar Parameter, и присваиваем ему имя 'Health' (этот параметр мы будем изменть с помощью скрипта)...

alt

Создаем новую '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' // говорим двигу, что из себя представляет наша переменная...
                                                                                                                          // т.е. это и есть сам материал
}

Компилируем, и смотрим что у нас получилось...
 
Creating HUD
 
 
 
 
Способ 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", если вы хотите узнать больше!

  • SetPos(float X, float Y) : Эта функция используется, для позиционирования на экране.Начиная с сверхнего левого угла. И отображения различных вещей в этой позиции.
  • SetDrawColor(byte R, byte G, byte B, optional byte A ) : Устанавливает цвет (с величинами: красный, зеленый и синий) и прозрачность (с величиной альфа), которым мы будем "рисовать" на нашем HUD.
  • var font Font : Эта переменная позволяет выбрать шрифт, для создания надписей на HUD.Я очень часто использую интегрированые функции:
     
                        Canvas.Font = class'Engine'.static.GetSmallFont();
                  Canvas.Font = class'Engine'.static.GetMediumFont();
                  Canvas.Font = class'Engine'.static.GetLargeFont();
  • DrawText(string S) / DrawTextCentered(string S) : отображение текста (выравнивание по центру через вторую функцию) на HUD. После того, как Вы выбрали положение, цвет и шрифт, чтобы использовать с предыдущими переменными и функциями.
  • DrawRect(float RectX, float RectY, optional Texture Tex = DefaultTexture) : нарисование прямоугольника, размером RectX *RectY. Если вы непомещаете текстуру, прямоугольник будет заполнен цветом, который Вы выбрали ранее.
  • DrawBox(float width, float height) : Позволяет выбрать форму прямоугольника width*height (ширина*высота) Вы должны предварительно выбрать позицию и цвет.
  • DrawTile(Texture Tex, float XL, float YL, float U, float V, float UL, float VL) / DrawMaterialTile (Material Mat, float XL, float YL, float U, float V, float UL, float VL) : можно сделать текстуру или материал для HUD, масштаб которой(которого) мы будем изменять через XL и YL. Изменением  параметров U и V можно сдвинуть текстуру.Например, с различными значениями U, мы можем получить:
    alt
    С помощью UL и VL мы можем "обрезать" текстуру. Например, UL меньше, чем размер текстуры:
    alt
  • var float ClipX / var float ClipY : Эти две переменные определяют ширину и высоту положения на экране, т.е. координаты нижнго правого угла.

Таким образом я закончил представлять Вам главные функции. Вы должны знать, что эти функции находятся не в разделе класса "HUD", а в атрибутах класса "Canvas" (вы наверное уже это заметили). Это потребует постоянного вызова "Canvas.TheFunction ()". Подводя итог, мы можем создать наш основной класс HUD:

 
******************************
 
 
*******************************

"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 - Пример

Так, теперь, когда мы с Вами все разобрали, попробуем сделать такой статус бар:


alt

Наш бар имеет:

  • Название
  • Десять прямоугольников (8px * 12px) с прозрачностью и / или цветом (в зависимости от значения переменной).
собственно function DrawBar() - функция описывающая наш статус бар:

Чтобы вывести на экран два статус бара с кол-вом жизней и патронов, напишем такой скрипт:

*********************************
 
class MyHUD extends UTHUD;



    / * Отображает активные прямоугольники * /
    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);

}

    }

}

defaultproperties
{
}

**************************************
 

И результат:

alt
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

#1 написал: M1reX45
1 Марта 2010 07:37 | ICQ: Не Указано |


Группа: Гости
Регистрация: Не Указано
не получается сделать по 2ому, версия удк - февраль 2010, при компиляции все время выдает ошибки на счет "/" в комментариях, после того как уберу их, ошибок нету, но в удк hud не поменялся(
Публикаций: 0 | Комментариев: 0      
#2 написал: eXsisteNz
1 Марта 2010 11:10 | ICQ: 616837370 |


Группа: Посетители
Регистрация: 17.11.2009
M1reX45 в настройках WorldProperties в Game Type For PIE выбери свой тип игры MyGameInfo
Публикаций: 0 | Комментариев: 10      
#3 написал: smitt
1 Марта 2010 16:55 | ICQ: 358667420 |


Группа: Модераторы
Регистрация: 22.12.2009
Mirex на месте / ставь //
Публикаций: 0 | Комментариев: 12      
#4 написал: FACH
1 Марта 2010 18:52 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Комментарии в UScript выделяются в строке обозначением "/* комментарий */", вся строка "//" и еще как-то. Комментарии не учитываются кодом, так что там можно писать все, что угодно.
Цитата: Artmancarver
Первый способ легкий, Второй - правильный

Не согласен я с тобой. Оба способа верны. Посмотрел бы я на твой код, если б ты первый способ описал. 2-й способ - очень удобен, материалами даже Эпики пользуются.
Цитата: PROOF
FACH, автор не указан...кликаешь по слову "оргигинал" и переходишь по ссылке...неужели не ясно!?

Блин, привык уже к тому, что после слова "Оригинал" идет ссылка


--------------------
Публикаций: 134 | Комментариев: 778      
#5 написал: PROOF
1 Марта 2010 19:04 | ICQ: 6668742 |


Группа: Администраторы
Регистрация: 16.12.2009
biggrin Да я спецом ошибки допустил, чтоб проверить, выполняет кто-нить или нет....Думаю - мож зря стараюсь...Между "/" и * пробелов быть не должно cool

// отделяет комментарием одну строку...

/* ... */ и /** ... */ отделяют кусок текста....


--------------------
Публикаций: 12 | Комментариев: 113      
#6 написал: Artmancarver
14 Марта 2010 06:29 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 17.12.2009
И ведь верно - Epic'и почти всегда используют материалы в HUD'ах. Хотя HUD, написанный скриптом, требует под себя в разы меньше ресурсов компьютера, а потому он все-же правильней, хоть и гораздо сложнее. Комбинация обоих методов - самый наилучший вариант.
Публикаций: 0 | Комментариев: 12      
#7 написал: Games-Territory
24 Апреля 2010 02:37 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 24.04.2010
а кто знает как сделать чтобы здоровье востанавливалось как в CoD??? ну тоесть тебя покоцали, ты запрятался гдето, подождал и жизни у тя восстановились!!! а ещё как убрать HUD с Health'ами??? буду очень признателен!!!


--------------------
Публикаций: 0 | Комментариев: 6      
#8 написал: smitt
24 Апреля 2010 14:01 | ICQ: 358667420 |


Группа: Модераторы
Регистрация: 22.12.2009
читай форум,это раз,см скрипт описанный в данном туторе,достаточно сделать функцию с пустым содержанием-худа нет,или редактируй стандартный скрипт
Публикаций: 0 | Комментариев: 12      
#9 написал: tahiro777
13 Мая 2010 11:22 | ICQ: Не Указано |


Группа: Гости
Регистрация: Не Указано
а тутора не намечается никакого по добавлению своего шрифта,я находил тутор,но почему то не получается.
Публикаций: 0 | Комментариев: 0      
#10 написал: FACH
13 Мая 2010 11:56 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Вреде - нет
http://www.moddb.com/games/unreal-tournament-3/tutorials/ui-tutorial-custom-font
s


--------------------
Публикаций: 134 | Комментариев: 778      
#11 написал: Omny
19 Июля 2010 17:29 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 25.06.2010
а можно стандартный худ как-нить убрать? И как это сделать??
Публикаций: 0 | Комментариев: 1      
#12 написал: FACH
19 Июля 2010 21:08 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
http://unreal-level.ru/163-faq-for-udk.html - Пост 24 - ini файл
http://unreal-level.ru/forum/topic/390 - Пост 2 - Кизмет

Я всего-лишь ввел в поиск: site:unreal-level.ru Убрать hud


--------------------
Публикаций: 134 | Комментариев: 778      
#13 написал: Geroll
30 Января 2011 17:47 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 23.01.2011
Так народ у меня проблема...
Тупая ппц.
я не могу найти New Scalar Parameter
Подскажите плз
Публикаций: 0 | Комментариев: 1      
#14 написал: FACH
30 Января 2011 18:36 | ICQ: 562039160 |


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


--------------------
Публикаций: 134 | Комментариев: 778      
#15 написал: bs1
8 Февраля 2011 21:06 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 4.02.2011
Проблема со вторым способом.Сделал все по тутору,выбрал GameType for PIE,но HUD остался Epic'овский.Помогите плз.


--------------------
Публикаций: 0 | Комментариев: 12      
#16 написал: bs1
7 Марта 2011 20:08 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 4.02.2011
С этим разобрался на форуме это уже было))).Теперь другой вопрос если можно.Какая строчка в скрипте отвечает за текстуру урона(ну когда в меня стреляют экран заливается красной текстурой).Как это изменить?


--------------------
Публикаций: 0 | Комментариев: 12      
#17 написал: FACH
7 Марта 2011 20:27 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
попробуй найти эту текстуру в контенте и по обращению к ней найти кусок кода


--------------------
Публикаций: 134 | Комментариев: 778      
#18 написал: bs1
10 Марта 2011 19:36 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 4.02.2011
FACH,а мне искать текcтуру или материал?


--------------------
Публикаций: 0 | Комментариев: 12      
#19 написал: FACH
10 Марта 2011 20:19 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
В контенте общем


--------------------
Публикаций: 134 | Комментариев: 778      
#20 написал: A-Lex
6 Августа 2011 16:34 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 27.01.2011
Не помешало бы добавить в урок то, что в "Game" класс нужно поставить параметр
bUseClassicHUD=true, чтобы HUD можно использовать стандартный, а не Scaleform-cкий
Публикаций: 0 | Комментариев: 3      
#21 написал: Fitil_san
27 Марта 2012 15:40 | ICQ: 412082434 |


Группа: Посетители
Регистрация: 19.03.2012
Всё я сдаюсь... Столько с этим худом просидел (по первому способу)... Пролистал все туторы и прошёл очень внимательно, вникал в то что даже не нужно было вникать... но когда я в своём классе UT_Test_Game в параметре Defaultproperties указываю HUDType=class'UT_Test.Test_HUD' или HUDType=class'Test_HUD' это не важно не меняется худ... Я что только не прописывал... Что только там не изменял и не удалял... Я уже пробовал сделать просто голый экран без HUD'a, но нефига не получилось...
P.S. да я ставил gameType и т.д.
P.S.S урок с камерами получился. а вот HUD изменить не могу...
P.S.S.S. Я даже пистолет ваш воткнул
P.S.S.S.S. Я облазил форум и перепробовал все варианты, которые там были рассмотрены другими юзерами...
2 дня и 2 ночи без перерыва с одним HUD'ом... это не дело....


--------------------
Публикаций: 0 | Комментариев: 17      
#22 написал: FACH
27 Марта 2012 20:05 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
Ты наткнулся на тоже, что писал тут bs1 в комментариях 32, 33, а именно, то что УДК сейчас юзает скайлформ, а не классический худ, bs1 нашел и тебе туда же: http://unreal-level.ru/forum/topic/187#post-10


--------------------
Публикаций: 134 | Комментариев: 778      
#23 написал: Fitil_san
27 Марта 2012 22:41 | ICQ: 412082434 |


Группа: Посетители
Регистрация: 19.03.2012
Спасибо помогло)) всё заработало, но опять почему-то гавнится она со мной..!
Значок Health чёрный (хотя такого цвета я вообще на задавал в цветовой гамме),
в настройках инст, который мы создали из данного материала жизни скачат довольно странным образом... если поставить 64, то тюбик жизни полный, а на 40 пустой, т.е. примерная середина это где-то 53.
Ну и конечно же (как же без этого) во время тестового запуска игры: ниже тюбика надпись, которую хотелось бы скрыть
MIC :: set scalar parameter value : modifying 'Health _ indicator _ inst' during gameplay. Paramname : health


--------------------
Публикаций: 0 | Комментариев: 17      
#24 написал: FACH
7 Апреля 2012 22:12 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
У меня все норм с материалом, параметр от 0 до 100 работает адекватно, как и должен


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






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