日期:2014-05-16  浏览次数:20384 次

Unity3D里面的JavaScript和浏览器的JavaScript的大致区别
速度比较快

Unity的JavaScript是经过编译了的,按照文章所讲,在Unity中使用JavaScript、C#或者Boo的执行速度并没有什么区别。


语法略有不同

类:
在Unity里,一个js文件就是一个类。从前基于浏览器的JavaScript是通过prototype来实现类(我一直用的是prototype.js框架)。
在Unity,比如要写一个Hello的类,里面有一个方法叫sayHello,建立一个Hello.js,然后在里面写


function sayHello(){
// do something
}

就可以了。
而从前用浏览器的JavaScript实现类,实际就是写个function,比如

var Hello=function(){
this.sayHello=function(){
// do something
}
}

如果用prototype.js框架,就这么写:

var Hello=Class.create();
Hello.prototype={
initialize:function(){
},
sayHello:function(){
}
};

继承

在Unity里,这么写:
新建一个MyHello.js文件,然后写

class MyHello extends Hello{

}

而从前基于浏览器的继承,我一般都是用prototype里的bind()方法来做。

还有虚拟函数的写法之类的,可以在那篇文章里找到。

数据类型

在Unity的JavaScript里,string叫String(S大写)。字符串必须用双引号,不能用单引号,而在从前基于浏览器的JavaScript里,单引号或者双引号随便写,也可以引号套引号。

变量必须先声明

主要可能是因为Unity里的JavaScript需要编译,所以在Unity里,变量必须事先声明才能使用,否则会出错。

变量的类型的写法

定义变量的时候,前面写var,表示是变量,然后写名字,后面跟冒号,冒号后面跟数据类型。
比如

var a:String;

写函数带的参数时也这么写,比如


function Test(param1: String, param2:Object){
//function body
}

做过Cocoa的朋友可能看着比较眼熟……

另外,如果直接定义了变量的类型,后面就不能改了,除非开始不定义变量类型。
比如

var a="test";
a=5;

这样就会出错。

但是如果这么写

var a;
a="test";
a=5;
就没问题。

对象

在从前基于浏览器的JavaScript里,这么写是没问题的:

var a = new Object();
a.myField=22;
不过在Unity里就完全不行,要想这么做,参考这个文章(不翻译了,都是代码)

早期Unity不支持switch()或者eval()函数

2.0之后就支持switch了,另外不建议用eval……不过我比较习惯用eval,虽然不是个好习惯。

每行后面必须写分号

基于浏览器的JavaScript里,不写分号也没什么问题,在Unity里,必须写。

不能写匿名函数

大概的意思就是不让用这种写法:

var bar=function(){}
我之前基于浏览器的JavaScript里总习惯这么写,因为经常会function里面套function。

不过这么写倒是可以的

function foo(x){ print(x); }
var bar = foo;
bar("test");
Math在Unity里叫Mathf

基本一样,就是后面加个小写的f。从前怎么用现在还怎么用就行了。常用的比如Math.round(),Math.ceil(),Math.floor()之类的……

调用Mono

Mono里面很多东西都可以拿来在JavaScript里用,想用就直接import:

import System;
import System.IO;
调试

可以用print()函数,也可以用Log()函数或者Debug.Log()函数。如果想设置断点,用Debug.Break()函数。

从前log这种东西还要自己写,然后显示在一个div里,现在用Unity倒是方便了。