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 static var var_stat: int;
    public var var_pub: int;
    public static function 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 - - +
this.PrivFunc - - +
Random + + +
Random.Range + + +
Random.Range(общая подсказка по параметрам + + ± (хелп только при
выборе функции)

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

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

все отлично


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

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

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

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