Въведение в UnrealEngine

Езикови основи

UnrealScript е обектно-ориентиран език, който е синтактично подобен на Java. Езикът не поддържа множествено наследяване, интерфейси (поддържа се от третата версия). Поддържа претоварване на оператори, но не и претоварване на методи. Не виждам смисъл да пренаписвам целия синтаксис на езика. Надявам се, че сте запознати с всеки език за програмиране. Затова ще опиша основните точки.

Типове данни
Деклариране на класове, променливи и функции
Декларация на класа

Където classname е името на класа, който се декларира, parentclass е името на родителския клас, модификаторите са модификатори. Основни модификатори:

  • Config(name)— име на .ini файла, където класът ще запази своите настройки
  • Native— класът е частично имплементиран в C++ код
  • NativeReplication- репликацията се извършва от C++ код
Останалите модификатори можете да намерите тук http://wiki.beyondunreal.com/Class#Modifiers

Променливи (свойства)

Където type е типът на променливата, variablename съответно имената на променливите. модификатори модификатори, които засягат поведението на променливата.

Инициализация на променливи

За инициализиране на променливи има специална структура, която обикновено се описва в края на класа.

Съответно име на променлива, име на масив, име на структура са имената на променливи, масиви и структури. Точката и запетая е важна, в този блок тя не се поставя в края, използва се прекъсване на реда.

Функции (методи)

Функциите се декларират по следния начин:

Когато модификаторите са модификатори, които влияят на поведението на функцията, returntype е типът, върнат от функцията, functionname е името на функцията, parameter е входящите (и в някои случаи изходящите) параметри на функцията.

Функционалните параметри са описани, както следва:

модификатори на параметри модификатори, които влияят на поведението на входящите параметри, въведете типа на предадения параметър, parametername името на параметъра, arraysize, ако масивът е предаден, тогава тук определяме неговия размер. Има много по-малко модификатори за параметри, има само два основни:

  • по избор- показва, че този параметър е по избор и ви позволява да зададете стойност по подразбиране
  • out- показва, че стойността на параметъра може да се променя вътре във функцията, това е много близко до аналога на предаване на стойността по референция, но това не е съвсем така.

Състояния (състояния) и латентни функции

Ако всичко, което е описано преди, се намира във всички OOP езици, но състоянията (състоянията) са функция на UnrealScript. В механиката на играта много неща се основават на състояния. Например, вашият герой може да бъде в няколко състояния: стойте, седнете, легнете. Във всяко състояние някои действия ще бъдат различни, като скорост на движение, способност за скок и т.н. Има няколко опции за прилагане на това, например, когато командвате скок, проверете в какво състояние е играчът в момента и дали може да го направи и едва тогава решете дали ще скочи или просто ще се изправи в целия си ръст. UnrealScript ни предлага друга опция. Ние описваме състоянията, в които може да бъде класът ни, и в тези състояния описваме функциите, които ще бъдат извикани вместо обичайните функции, ако играчът е в това състояние. Състоянието е описано по следния начин:

modifiers - модификатори, този път от само два:

  • Автоматично- екземпляр на класа автоматично влиза в това състояние, когато бъде създаден.
  • Симулирано- казва, че състоянието може да бъдеизпълнявани на клиента по време на репликация
statename - името на състоянието parentstate - показва, че то разширява друго състояние.

Изводът е, че чрез извикване на тестовия метод ще получим изход към конзолата за текущото състояние на обекта в зависимост от. Всичко е доста просто. Можем също така да опишем в състоянието набор от команди, които се изпълняват, когато го въведете.

В резултат на това, когато обектът влезе в състояние StateOne, ще видим реда Going into StateOne в конзолата. Държавата е много гъвкаво нещо, но трябва да се работи внимателно с тях, за да не се объркате кога и какво се случва.

Също така в UnrealScript има такова нещо - латентни функции. Латентните функции са функции, чието изпълнение отнема определено време в играта. Например функцията Sleep, която спира изпълнението на команди за определено време. Латентните функции могат да се извикват само в рамките на състояния. В момента няма да имате нужда от условия, но трябва да сте наясно с тях, особено след като са наследени.

Работа със скриптове

Както можете да видите, езикът UnrealScript е подобен на други ООП, в него няма нищо свръхестествено. Има много нюанси, но като цяло нищо необичайно и не трябва да се страхувате от това. Ето защо, нека сега разберем как да създаваме и компилираме скриптове.Има два начина, единият от които е чрез UnrealEd, но според мен това не е най-удобният вариант, така че ще се научим да го правим сucc.

Малко за това какво представляват пакетите

UnrealEngine съхранява всички свои ресурси (текстури, модели, звуци, музика (не винаги), скриптове и т.н.) в пакети. Пакетите, в зависимост от типа, може да имат различни utx/umx/usx/u разширения, но това са едни и същи пакети - разделянето е за удобство. От това възниква първият инцидент, никога не правете двапакети със същото име, но различно разширение, двигателят ще вижда само един от тях нормално. Появява се и вторият момент - всичко може да се съхранява в пакета (тоест може да има звуци, текстури и скриптове едновременно).

Създаване на нашия първи пакет

Сега можем да изпълним командата ucc TestPack.Test и да видим нашия cmdlet на работа, а именно изхода HelloWorld. Поздравления за първия създаден пакет.

Малки трикове

Йерархия и често използвани класове

Време е да поговорим за йерархията на класовете в UnrealEngine. Основният клас е Object, всички основни класове вече наследяват от него. Обект - съдържа описание на основните структури на двигателя и някои системни методи. Не трябва да се опитвате да възстановявате пакетите на играта, повечето от тях съдържат връзки към Native код, така че няма да могат да се изграждат. Вторият по важност е класът Актьор. Той описва основните характеристики на всички обекти, които могат да бъдат добавени към нивото - техните свойства, движение, физика на репликация и т.н. Всички други обекти, които се добавят към нивото, са наследени от този клас. По-долу пиша предназначението на основните класове, които ще срещнете.

Базовият клас за всички останали игрални обекти. Описва видовете физика, осветление, мрежова роля и други неща, класът трябва да се изучава поне по диагонал. Той декларира функциите PreBeginPlay и PostBeginPlay, които допълнително се използват от всички подкласове за инициализация.

GameInfo - класът отговаря за правилата на играта, нейното начало и край, задава класа за управление на играчите, а също така контролира тяхното свързване и изключване от играта. Функции за изследване заPreLogin,Login,PostLogin,Logout. И същопроменливиHUDType— задава класа HUDa;PlayerControllerClassName- задава класа PlayerController;bDelayedStart- дали играта започва веднага или след някакво условие.

Пешка (пешки) - клас, който описва актьорите, които вземат пряко участие в играта, като ботове, npc, играчи. Класът описва много функции, но почти всички от тях се отнасят за 3D действия. Ако създадете нов герой, тогава ще го наследите от този клас. Бих обърнал специално внимание на променливатаbSpecialCalcView, която показва кой отговаря за показването на камерата, класа Pawn или класа PlayerController. Ако е зададено на true, тогава функциятаSpecialCalcViewна вашия клас ще бъде извикана, където можете да зададете позицията на камерата.

PlayerController

PlayerController е клас, който отговаря за обработката на контрола, тук се събират всички натискания на бутони, движение на мишката, позиция на джойстика и т.н. Особено забележителна е функциятаPlayerTick, която се извиква всеки тик, иPlayerCalcView, която отговаря за позицията на камерата, ако пешката не е отговорна за нея. Трябва също така да се има предвид, че много събития първо идват тук и едва след това могат да бъдат прехвърлени в Pawn, например NotifyBump, NotifyHitWall. Класът AIController отговаря за управлението на ботове.

HUD - отговаря за изобразяването на HUD. Най-интересната функция еPostRender, който показва целия HUD.

Заключение

Тук накратко се запознаваме с UnrealScript. Езикът е много мощен, но прост. Като цяло вече сте готови да създадете подкласовете, от които се нуждаете, и да започнете да правите вашата игра, или презентация, или опция за интелигентен домашен контрол, както направи stdamit в статията за Unreal LED, илиуправление на натоварването от Unreal Tournament. Основната цел на тази статия е да покажа, че UnrealScript не е страшен и се надявам, че успях.

Референтни връзки

PS. В следващата част ще говорим за репликацията, какво представлява, за какво служи и как да я използваме.