Введение в Unity JavaScript - часть 1 из 2
В этом уроке мы исходим из того что вы уже знаете основы
программирования на JavaScript. Мы не будем с нуля объяснять принципы
программирования или JavaScript, если у вас нет таких знаний, может вам
стоит купить книгу по программированию или взять обучающие курсы.
Unity JavaScript и JavaScript который вам уже известен.
Он Быстрее.
Unity JavaScript компилируется в бинарный код что намного повышает
его скорость, но и делает его менее динамичным чем JavaScript под
браузер, который не компилируется совсем.
Если в серьёз то нет разницы в скорости между JavaScript, C# и Boo
под Unity, есть другие преимущества между ними, но не скорость.
заметка: если вы следите за последними разработками в мире воин
между браузерами, то вы наверно заметили, что то что я сказал выше не в
точности верно, так как JavaScript в настоящее время на
модернизированных браузерах JIT прекомпилирован и даже на нескольких
браузерах впечатляюще быстр (Firefoх, Safari и Opera). Но даже если так
он не поддерживает строгое определение типов (даже как опцию) а это
очень важно для производительности, каждый раз когда вы делаете
арифметическую операцию вам нужно определить тип ваших операторов и
если нужно конвертировать его. Если стандарт ECMAScripт будет изменён
так как запросили Adobe, что позволит определение типов, то возможно
что правильно написанные JavaScript программы будут работать
значительно быстрее.
И всётаки, на данный момент “настоящий” JavaScript всё ещё как
минимум в 2 раза медленнее чем JavaScript от Unity, и даже на
“Squirrelfish Ehtreme”.
Subclassing менее нудное чем настоящий JavaScript
В Unity JavaScript не нужно больше мучиться с _prototype, стоит применять Mixins и Helpers вместо Subclassing.
Очень просто писать процессы которые знают друг о друге и
взаимодействуют, так и понятней и значительно легче специализировать
объекты в Unity чем subclassing.
к примеру:
var bar : Bar; function Start() { bar = gameObject.GetComponent(Bar); } function doEet(){ if( bar ) { bar.doEet(); } } /* Foo.js */
var bar : Bar;
function Start() {
bar = gameObject.GetComponent(Bar);
}
function doEet(){
// делаем что-то тут
if( bar ) {
bar.doEet();
}
}
/* Bar.js */
function doEet() {
// делаем тут что-то особенное
}
Это String (Класс String от Mono) а не string
var х : String;
Большая часть функциональности string которую вы знаете и любите из JavaScript всё ещё там, но начинается с большой буквы.
String всегда берётся в двойные кавычки и всегда интерполирован.
В Unity, String всегда в двойных кавычках “”. Одинарные кавычки запрещены.
Звучит ужастно с точки зрения безопасности от профессиональных
JavaScripт хакеров, которым двойные кавычки как подарок, чем одинарные
которые защищают нас от взлома, но поскольку Unity код компилируется,
тут такой проблемы нет. кроме того двойные кавычки будут более удобны.
Интерполирован - это просто красивый способ сказать что “\n” станет новой строкой.
var a = 'fred'; var b = 'fred\n'; var a = "fred"; var a = 'fred'; // Работает на стандартном JavaScript, но выдаст ошибку на Unity
var b = 'fred\n'; // не конвертирует \n в новую строку
var a = "fred"; // будет работать и на Unity и на Стандартном JavaScript,
// причём Unity от такого применения ковычек производительностью не пострадает.
Вы обазаны деклариравать переменные перед их использованием.
Вы должны, в точности деклариравать переменные. Это
также и большой плюс поскольку именно это позволяет программе бежать
быстрее, распознавать определённые ошибки во время компиляции - что
очень приятно, и также другие ошибки во время запуска - что менее
приятно.
a = "fred"; var a = "fred"; var b: String; b = "wilma"; var c; c = "barney"; c = 17; a = "fred"; // Работает на стандартном JavaScript, но выдаст ошибку на Unity
var a = "fred"; // переменное a сейчас типа string, и содержит значение 'fred'
var b: String; // переменное b сейчас string, но не содержит никакого значения.
b = "wilma";
var c; // c сейчас имеет тип динамического переменного, без значения.
c = "barney";
c = 17;
- Вы можете (и часто должны) вточности определять переменные как private, static и так далее…
- Unity постараетса сам определить тип переменного если вы дадите ему значение во время его декларации.
var a = "fred"; a = 5; var b : String = "fred"; var a = "fred"; // a сейчас принадлежит типу String
a = 5; // Ошибка! -- a он String
var b : String = "fred"; // Так Надёжней
Но:
var a; a = "fred"; a = 5; var a; // a имеет динамический тип
a = "fred"; // работает
a = 5; // работает
автор оригинального текста: Tonio Loewald, перевод - unitydev.ru
Источник: http://www.unitydev.ru/tutorials/scripting/vvedenie-v-unity-javascript-p1.html |