Итак, мы хотим написать игрушку на 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 штуки:
- MonoDevelop, поставляющийся в комплекте с Unity
- UniScript Editor (здесь)
- 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(общая подсказка по параметрам | + | + | ± (хелп только при выборе функции) |
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 (который, по сути, — является Эклипсом).
Если у кого-то есть опыт — welcome в комменты, с удовольствием выслушаю.
Автор: soulburner