Unity — выбираем редактор javascript

в 11:18, , рубрики: game development, javascript, unity, unity3d, unityscript, метки: , , ,

Unity — выбираем редактор javascriptИтак, мы хотим написать игрушку на Unity. Юнити предоставляет нам выбор из трех скриптовых языков — Javascript, C# и Boo.

Т.к. с Boo разбираться вообще не хотелось, то для нас стоял выбор JS vs C#. Для наших целей больше подошел именно JavaScript (на самом деле, правильнее было бы называть его UnityScript), т.к. он имеет более мягкую типизацию, да и переводить существующий у нас код из флэшового ActionScript'а было бы гораздо проще.

Но мы столкнулись с проблемой, которую вообще не ожидали обнаружить.

Вы не поверите, но для Unity нет нормального редактора JavaScript'а (речь идет о разработке под Windows, хотя под Мак ситуация, как я понял — не лучше).

Список редакторов можно посмотреть в неофициальной вики.

Итак, что же я хочу от редактора?

Конечно же, я хочу умный и развитый auto-complete (intellisence).

Будем тестировать редактор на следующем коде:

Отдельно создадим тестовый класс TestClass.js:

public class TestClass {

    public staticvar var_stat: int;
    public var var_pub: int;
    public staticfunction TestFunc(): void {}

}

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

public class TestClass2 {

    public var var_pub: int;
    protected var var_prot: int;
    private var var_priv: int;

    public static function StatFunc(): void {}

    private function PrivFunc(): void {}

    public function get var_getter(): int { return var_priv; }

    public function DoTest() {

        var var_int: int;
        // здесь будем тестить auto-complete

    }

}

Писать код будем в месте, помеченном комментом и будем хотеть увидеть автокомплит.

Редакторов я нашел 3 штуки:

  1. MonoDevelop, поставляющийся в комплекте с Unity
  2. UniScript Editor (здесь)
  3. UnityDevelop (модифицированный FlashDevelop древней версии + классы для unity 3.5 — здесь)

В табличке ниже я помечу плюсиками те ситуации, где автокомплит справился.

код / функционал MonoDevelop UniScript Editor UnityDevelop
TestClass + - +
TestClass2 - - +
TestClass.TestFunc - - +
TestClass2.StatFunc + - +
var_int + + +
var_pub + + +
var_prot - + +
var_priv - + +
var_getter - - +
var o: TestClass;
o.
var_pub
+ + +
Random + + +
Random.Range + + +
Random.Range(общая подсказка по параметрам + + ± (хелп только при
выборе функции)

Unity — выбираем редактор javascript

Random.Range(подсказка по параметрам в зависимости от параметра +
Unity — выбираем редактор javascript
- -
Instantiate - + -
Instantiate(подсказка по параметрам - + -
var go: GameObject - + +
информация о переменной при наведении мышки - + +
информация о функции при наведении мышки - - +
ctrl+click (переход на определение функции/переменной) - - -
дерево классов только текущий класс
ломается на геттерах
(перестает показывать
что-либо)

Unity — выбираем редактор javascript

только переменные
только текущий класс

Unity — выбираем редактор javascript

все отлично

Unity — выбираем редактор javascript

И что же мы видим? В принципе, наилучшим выглядит UnityDevelop. Но неудобный хелп по функциям все портит. Возможно, если бы кто-то адаптировал свежий FlashDevelop под Unity — все было бы хорошо. Но никто этого не сделал (сейчас UnityDevelop построен на FD 2.0).

И ни один редактор не поддерживает Ctrl+Click.

Вывод? Не знаю… Писать на шарпах в VS?

А вообще — я удивлен, что Unity так безолаберно относится к своему редактору. Все-таки, — продукт недешевый ($1500 за про версию + еще $3000 за про версии под iOS/Android). Могли бы сделать что-то более вменяемое. Например, прикрутить к тому же Eclipse, как это сделали Adobe со своим Flash Builder (который, по сути, — является Эклипсом).

Если у кого-то есть опыт — welcome в комменты, с удовольствием выслушаю.

Автор: soulburner

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js