UnrealScript
UnrealScript (також UScript) - це рідна скриптова мова Unreal Engine, яка використовувалась для написання коду та подій ігрового процесу на Unreal Engine до релізу 4-ї версії цього рушія. Мова була розроблена для простого, високорівневого програмування ігор. Інтерпретатор UnrealScript був запрограмований Тімом Свіні, який також створив попередню скриптову мову гри ZZT-oop[en]. UnrealScript компілюється, але не є частиною основного виконуваного файлу. Це робить її ідеальним засобом реалізації та повторення нових елементів ігрового процесу без необхідності перекомпільовувати весь двигун при внесенні змін. Вихідний код є закритим. Подібно до Java, UnrealScript є об'єктно-орієнтованою без багаторазового успадкування (усі класи успадковуються від загального класу Object), а класи визначаються в окремих файлах, названих відповідно до класу, який вони визначають. У той же час, оскільки UnrealScript використовують в розробці відеоігор, деякі принципи та методології відрізняються від традиційного програмування. Наприклад, немає стандартних явних конструкторів або деструкторів для об’єктів, які можуть викликати суперечність з тими, що використовуються для більш традиційних мов програмування. На відміну від Java, UnrealScript не має обгортки об'єктів для примітивних типів. Інтерфейси підтримувалися лише в Unreal Engine 3-го покоління та кількох іграх Unreal Engine 2. UnrealScript підтримує перевантаження оператора, але не перевантаження функцій, за винятком додаткових параметрів. У березні 2014 року компанія Epic Games заявила, що Unreal Engine 4 підтримуватиме не UnrealScript, а сценарії(скрипти) ігор на C++. Візуальні скрипти будуть підтримуватися системою візуалізації Blueprints, заміною попередній системі Kismet.
Приклад кодуІсторично програмісти відеоігор використовували концепцію станів з тих пір, як ігри пройшли епоху «понгу». Стани (і те, що відоме як "програмування машин стану") - це природний спосіб зробити складну поведінку об'єкта керованою. Однак до 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 можна легко підкласувати існуючий клас, додавати нові стани та функції. Якщо намагатися зробити це без станів, отриманий код згодом було б складніше розширити. Існують три основні приховані функції, доступні для всіх акторів:
Три рідні функції UnrealScript особливо корисні при написанні коду стану:
Приклад: // 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:
Для забезпечення високорівневого програмування UnrealScript працює на рівні об'єктів і взаємодій, а не на рівні бітів і пікселів. Однак в цілях збільшення потужності та забезпечення простоти мови доводиться жертвувати швидкістю виконання.
Документація та підручники
Див. такожПосилання
Примітки
Information related to UnrealScript |