UnrealScript (також UScript) - це рідна скриптова мова Unreal Engine, яка використовувалась для написання коду та подій ігрового процесу на Unreal Engine до релізу 4-ї версії цього рушія. Мова була розроблена для простого, високорівневого програмування ігор. Інтерпретатор UnrealScript був запрограмований Тімом Свіні, який також створив попередню скриптову мову гри [en]. UnrealScript компілюється, але не є частиною основного виконуваного файлу. Це робить її ідеальним засобом реалізації та повторення нових елементів ігрового процесу без необхідності перекомпільовувати весь двигун при внесенні змін. Вихідний код є закритим.
Unreal Script | |
---|---|
Парадигма | об'єктно-орієнтована, узагальнена |
Дата появи | 1998 |
Творці | Тім Свіні |
Розробник | Epic Games |
Останній реліз | |
Система типізації | статична, строга типізація, safe typing |
Основні реалізації | віртуальна машина Unreal Engine |
Операційна система | Мультиплатформна |
Ліцензія | UDK Licensing Resources |
Вебсайт | docs.unrealengine.com/udk/Three/UnrealScriptHome.html |
Подібно до Java, UnrealScript є об'єктно-орієнтованою без багаторазового успадкування (усі класи успадковуються від загального класу Object), а класи визначаються в окремих файлах, названих відповідно до класу, який вони визначають. У той же час, оскільки UnrealScript використовують в розробці відеоігор, деякі принципи та методології відрізняються від традиційного програмування. Наприклад, немає стандартних явних конструкторів або деструкторів для об’єктів, які можуть викликати суперечність з тими, що використовуються для більш традиційних мов програмування. На відміну від Java, UnrealScript не має обгортки об'єктів для примітивних типів. Інтерфейси підтримувалися лише в Unreal Engine 3-го покоління та кількох іграх Unreal Engine 2. UnrealScript підтримує перевантаження оператора, але не перевантаження функцій, за винятком додаткових параметрів.
У березні 2014 року компанія Epic Games заявила, що Unreal Engine 4 підтримуватиме не UnrealScript, а сценарії(скрипти) ігор на . Візуальні скрипти будуть підтримуватися системою візуалізації Blueprints, заміною попередній системі Kismet.
Одним із ключових моментів у розвитку Unreal Engine 4 була серія проведених нами дебатів про UnrealScript - мову сценаріїв, яку я будував протягом трьох поколінь. Нашою метою було зробити її конкурентоспроможною у майбутньому. Ми продовжували переглядати все більше та більше варіантів того, що нам потрібно зробити, щоб оновити її, і хто міг би виконати цю роботу. Ця справа ставала дуже громіздкою. Відбулась масштабна зустріч, на котрій ми спробували розібратися, спробували вирішити, що вирізати, що залишити і ... був момент, коли я подивився на все і сказав: ‘Ви знаєте, все, що ви пропонуєте додавати до UnrealScript, вже є на C ++. Чому б нам просто не вбити UnrealScript, і не перейти на чистий C ++? ‘. — Свіні, Gamasutra, 2017
Приклад коду
Історично програмісти відеоігор використовували концепцію станів з тих пір, як ігри пройшли епоху «понгу». Стани (і те, що відоме як "програмування машин стану") - це природний спосіб зробити складну поведінку об'єкта керованою. Однак до UnrealScript стани не підтримувалися на мовному рівні, що вимагало від розробників створювати оператори «перемикання» C/C ++ на основі стану об’єкта. Такий код було важко писати та оновлювати.
UnrealScript підтримує стани на мовному рівні. Тому в цій мові можна писати функції та код, які існують у певному стані. Ці функції викликаються лише тоді, коли актор знаходиться в ньому. Притому кожен актор завжди знаходиться в одному і лише одному стані, котрий відображає дію, яку він хоче виконати.
Приклад станів зі сценарію TriggerLight:
// Trigger turns the light on. state() TriggerTurnsOn { function Trigger( actor Other, pawn EventInstigator ) { Trigger = None; Direction = 1.0; Enable( 'Tick' ); } } // Trigger turns the light off. state() TriggerTurnsOff { function Trigger( actor Other, pawn EventInstigator ) { Trigger = None; Direction = -1.0; Enable( 'Tick' ); } } }
Тут оголошуються два різні стани (TriggerTurnsOn та TriggerTurnsOff), і різні версії функції Trigger у кожному стані. Хоча можлива реалізація без станів, використання станів робить код більш модульним та розширеним: у UnrealScript можна легко підкласувати існуючий клас, додавати нові стани та функції. Якщо намагатися зробити це без станів, отриманий код згодом було б складніше розширити.
Існують три основні приховані функції, доступні для всіх акторів:
- Sleep (плаваючі секунди) - призупиняє виконання стану на певний час, а потім продовжує.
- FinishAnim () - чекає, поки поточна анімаційна послідовність, завершиться, а потім продовжується. Ця функція полегшує написання сценаріїв на основі анімації, сценарії виконання яких регулюються анімацією сітки. Наприклад, більшість сценаріїв ШІ керуються анімацією (на відміну від часу), тому що плавна анімація є ключовою метою системи ШІ.
- FinishInterpolation () - чекає завершення поточного руху InterpolationPoint, а потім продовжує.
Три рідні функції UnrealScript особливо корисні при написанні коду стану:
- Функція "Goto ('LabelName')" (подібно до C/C ++/Basic goto) у стані змушує код стану продовжувати виконуватись за вказаною міткою.
- Спеціальна команда "Stop" всередині стану припиняє виконання коду стану. Воно не триватиме, доки ви не перейдете до нового стану або нової мітки в поточному стані.
- Функція "GotoState" змушує актора переходити до нового стану та за бажанням продовжувати на зазначеній мітці.
Приклад:
// This is the automatic state to execute. auto state Idle { // When touched by another actor... function Touch( actor Other ) { `log( "I was touched, so I'm going to Attacking" ); GotoState( 'Attacking' ); `log( "I have gone to the Attacking state" ); } Begin: `log( "I am idle..." ); sleep( 10 ); goto 'Begin'; } // Attacking state. state Attacking { Begin: `log( "I am executing the attacking state code" ); ... }
При виконанні отримуємо:
I am idle... I am idle... I am idle... I was touched, so I'm going to Attacking I have gone to the Attacking state I am executing the attacking state code
Структура
UnrealScript має статичну типізацію. Широко використовується паралелізм виконання завдань - як правило, кожен об'єкт має свій потік виконання в рамках віртуальної машини. Присутня широка підтримка типів, часто використовуються вектор, кути Ейлера, матриці і т.п.
Основні концепції програмування мови UnrealScript, витікають із Java:
- відсутність покажчиків і автоматичне прибирання сміття;
- неможливість множинного успадкування класів;
- строга перевірка типів при компіляції;
- безпечне виконання на стороні клієнта "sandbox" (пісочниці);
- знайомий зовнішній вигляд коду, подібний до C / C ++ і Java.
Для забезпечення високорівневого програмування UnrealScript працює на рівні об'єктів і взаємодій, а не на рівні бітів і пікселів. Однак в цілях збільшення потужності та забезпечення простоти мови доводиться жертвувати швидкістю виконання.
Прості типи даних
Тип | Опис типу та набір його значень |
---|---|
bool | true, false |
byte | ціле число з діапазоном значень від 0 до 255 |
int | ціле 32-х бітне число з діапазоном значень від −2 147 483 648 до 2 147 483 647 |
float | 32-х бітне число з рухомою комою |
string | рядок символів Unicode |
enum | тип перерахування, що містить набір іменованих констант 0 і 1 |
name | тип, що вказує ім'я класу, стану та ін. |
Object | посилання на об'єкт |
Actor | посилання на об'єкт класу Actor або успадкованого від нього |
Class | посилання вказує на тип класу чи успадкованого від нього класу |
Struct | структура, що складається із фіксованого числа полів |
Array | статичний масив |
Документація та підручники
- UnrealScript programming [ 8 вересня 2021 у Wayback Machine.]
- The Unreal Engine Documentation Site [ 5 жовтня 2021 у Wayback Machine.]
- UnrealScript States [ 5 жовтня 2021 у Wayback Machine.]
Див. також
Посилання
- Unreal Wiki [ 26 вересня 2021 у Wayback Machine.]
- https://habr.com/ru/post/188662/ [ 1 жовтня 2021 у Wayback Machine.]
Примітки
- WawroBloggerMarch 01, Alex; 2017 (1 березня 2017). . Game Developer (англ.). Архів оригіналу за 20 липня 2017. Процитовано 6 жовтня 2021.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
UnrealScript takozh UScript ce ridna skriptova mova Unreal Engine yaka vikoristovuvalas dlya napisannya kodu ta podij igrovogo procesu na Unreal Engine do relizu 4 yi versiyi cogo rushiya Mova bula rozroblena dlya prostogo visokorivnevogo programuvannya igor Interpretator UnrealScript buv zaprogramovanij Timom Svini yakij takozh stvoriv poperednyu skriptovu movu gri en UnrealScript kompilyuyetsya ale ne ye chastinoyu osnovnogo vikonuvanogo fajlu Ce robit yiyi idealnim zasobom realizaciyi ta povtorennya novih elementiv igrovogo procesu bez neobhidnosti perekompilovuvati ves dvigun pri vnesenni zmin Vihidnij kod ye zakritim Unreal ScriptParadigma ob yektno oriyentovana uzagalnenaData poyavi 1998Tvorci Tim SviniRozrobnik Epic GamesOstannij relizSistema tipizaciyi statichna stroga tipizaciya safe typingOsnovni realizaciyi virtualna mashina Unreal EngineOperacijna sistema MultiplatformnaLicenziya UDK Licensing ResourcesVebsajt docs unrealengine com udk Three UnrealScriptHome html Podibno do Java UnrealScript ye ob yektno oriyentovanoyu bez bagatorazovogo uspadkuvannya usi klasi uspadkovuyutsya vid zagalnogo klasu Object a klasi viznachayutsya v okremih fajlah nazvanih vidpovidno do klasu yakij voni viznachayut U toj zhe chas oskilki UnrealScript vikoristovuyut v rozrobci videoigor deyaki principi ta metodologiyi vidriznyayutsya vid tradicijnogo programuvannya Napriklad nemaye standartnih yavnih konstruktoriv abo destruktoriv dlya ob yektiv yaki mozhut viklikati superechnist z timi sho vikoristovuyutsya dlya bilsh tradicijnih mov programuvannya Na vidminu vid Java UnrealScript ne maye obgortki ob yektiv dlya primitivnih tipiv Interfejsi pidtrimuvalisya lishe v Unreal Engine 3 go pokolinnya ta kilkoh igrah Unreal Engine 2 UnrealScript pidtrimuye perevantazhennya operatora ale ne perevantazhennya funkcij za vinyatkom dodatkovih parametriv U berezni 2014 roku kompaniya Epic Games zayavila sho Unreal Engine 4 pidtrimuvatime ne UnrealScript a scenariyi skripti igor na C Vizualni skripti budut pidtrimuvatisya sistemoyu vizualizaciyi Blueprints zaminoyu poperednij sistemi Kismet Odnim iz klyuchovih momentiv u rozvitku Unreal Engine 4 bula seriya provedenih nami debativ pro UnrealScript movu scenariyiv yaku ya buduvav protyagom troh pokolin Nashoyu metoyu bulo zrobiti yiyi konkurentospromozhnoyu u majbutnomu Mi prodovzhuvali pereglyadati vse bilshe ta bilshe variantiv togo sho nam potribno zrobiti shob onoviti yiyi i hto mig bi vikonati cyu robotu Cya sprava stavala duzhe gromizdkoyu Vidbulas masshtabna zustrich na kotrij mi sprobuvali rozibratisya sprobuvali virishiti sho virizati sho zalishiti i buv moment koli ya podivivsya na vse i skazav Vi znayete vse sho vi proponuyete dodavati do UnrealScript vzhe ye na C Chomu b nam prosto ne vbiti UnrealScript i ne perejti na chistij C Svini Gamasutra 2017Priklad koduIstorichno programisti videoigor vikoristovuvali koncepciyu staniv z tih pir yak igri projshli epohu pongu Stani i te sho vidome yak programuvannya mashin stanu ce prirodnij sposib zrobiti skladnu povedinku ob yekta kerovanoyu Odnak do UnrealScript stani ne pidtrimuvalisya na movnomu rivni sho vimagalo vid rozrobnikiv stvoryuvati operatori peremikannya C C na osnovi stanu ob yekta Takij kod bulo vazhko pisati ta onovlyuvati UnrealScript pidtrimuye stani na movnomu rivni Tomu v cij movi mozhna pisati funkciyi ta kod yaki isnuyut u pevnomu stani Ci funkciyi viklikayutsya lishe todi koli aktor znahoditsya v nomu Pritomu kozhen aktor zavzhdi znahoditsya v odnomu i lishe odnomu stani kotrij vidobrazhaye diyu yaku vin hoche vikonati Priklad staniv zi scenariyu TriggerLight Trigger turns the light on state TriggerTurnsOn function Trigger actor Other pawn EventInstigator Trigger None Direction 1 0 Enable Tick Trigger turns the light off state TriggerTurnsOff function Trigger actor Other pawn EventInstigator Trigger None Direction 1 0 Enable Tick Tut ogoloshuyutsya dva rizni stani TriggerTurnsOn ta TriggerTurnsOff i rizni versiyi funkciyi Trigger u kozhnomu stani Hocha mozhliva realizaciya bez staniv vikoristannya staniv robit kod bilsh modulnim ta rozshirenim u UnrealScript mozhna legko pidklasuvati isnuyuchij klas dodavati novi stani ta funkciyi Yaksho namagatisya zrobiti ce bez staniv otrimanij kod zgodom bulo b skladnishe rozshiriti Isnuyut tri osnovni prihovani funkciyi dostupni dlya vsih aktoriv Sleep plavayuchi sekundi prizupinyaye vikonannya stanu na pevnij chas a potim prodovzhuye FinishAnim chekaye poki potochna animacijna poslidovnist zavershitsya a potim prodovzhuyetsya Cya funkciya polegshuye napisannya scenariyiv na osnovi animaciyi scenariyi vikonannya yakih regulyuyutsya animaciyeyu sitki Napriklad bilshist scenariyiv ShI keruyutsya animaciyeyu na vidminu vid chasu tomu sho plavna animaciya ye klyuchovoyu metoyu sistemi ShI FinishInterpolation chekaye zavershennya potochnogo ruhu InterpolationPoint a potim prodovzhuye Tri ridni funkciyi UnrealScript osoblivo korisni pri napisanni kodu stanu Funkciya Goto LabelName podibno do C C Basic goto u stani zmushuye kod stanu prodovzhuvati vikonuvatis za vkazanoyu mitkoyu Specialna komanda Stop vseredini stanu pripinyaye vikonannya kodu stanu Vono ne trivatime doki vi ne perejdete do novogo stanu abo novoyi mitki v potochnomu stani Funkciya GotoState zmushuye aktora perehoditi do novogo stanu ta za bazhannyam prodovzhuvati na zaznachenij mitci Priklad This is the automatic state to execute auto state Idle When touched by another actor function Touch actor Other log I was touched so I m going to Attacking GotoState Attacking log I have gone to the Attacking state Begin log I am idle sleep 10 goto Begin Attacking state state Attacking Begin log I am executing the attacking state code Pri vikonanni otrimuyemo I am idle I am idle I am idle I was touched so I m going to Attacking I have gone to the Attacking state I am executing the attacking state codeStrukturaUnrealScript maye statichnu tipizaciyu Shiroko vikoristovuyetsya paralelizm vikonannya zavdan yak pravilo kozhen ob yekt maye svij potik vikonannya v ramkah virtualnoyi mashini Prisutnya shiroka pidtrimka tipiv chasto vikoristovuyutsya vektor kuti Ejlera matrici i t p Osnovni koncepciyi programuvannya movi UnrealScript vitikayut iz Java vidsutnist pokazhchikiv i avtomatichne pribirannya smittya nemozhlivist mnozhinnogo uspadkuvannya klasiv stroga perevirka tipiv pri kompilyaciyi bezpechne vikonannya na storoni kliyenta sandbox pisochnici znajomij zovnishnij viglyad kodu podibnij do C C i Java Dlya zabezpechennya visokorivnevogo programuvannya UnrealScript pracyuye na rivni ob yektiv i vzayemodij a ne na rivni bitiv i pikseliv Odnak v cilyah zbilshennya potuzhnosti ta zabezpechennya prostoti movi dovoditsya zhertvuvati shvidkistyu vikonannya Prosti tipi danih Tip Opis tipu ta nabir jogo znachen bool true false byte cile chislo z diapazonom znachen vid 0 do 255 int cile 32 h bitne chislo z diapazonom znachen vid 2 147 483 648 do 2 147 483 647 float 32 h bitne chislo z ruhomoyu komoyu string ryadok simvoliv Unicode enum tip pererahuvannya sho mistit nabir imenovanih konstant 0 i 1 name tip sho vkazuye im ya klasu stanu ta in Object posilannya na ob yekt Actor posilannya na ob yekt klasu Actor abo uspadkovanogo vid nogo Class posilannya vkazuye na tip klasu chi uspadkovanogo vid nogo klasu Struct struktura sho skladayetsya iz fiksovanogo chisla poliv Array statichnij masivDokumentaciya ta pidruchnikiUnrealScript programming 8 veresnya 2021 u Wayback Machine The Unreal Engine Documentation Site 5 zhovtnya 2021 u Wayback Machine UnrealScript States 5 zhovtnya 2021 u Wayback Machine Div takozhJava Unreal Engine Source Epic Games Ob yektno oriyentovane programuvannyaPosilannyaUnreal Wiki 26 veresnya 2021 u Wayback Machine https habr com ru post 188662 1 zhovtnya 2021 u Wayback Machine PrimitkiWawroBloggerMarch 01 Alex 2017 1 bereznya 2017 Game Developer angl Arhiv originalu za 20 lipnya 2017 Procitovano 6 zhovtnya 2021