查看: 4239|回复: 9
打印 上一主题 下一主题

JavaScript语言和Unity3d的JavaScript语言

[复制链接]

4

主题

0

听众

63

积分

设计初学者

Rank: 1

纳金币
51
精华
0
跳转到指定楼层
楼主
发表于 2012-8-16 19:53:20 |只看该作者 |倒序浏览
   虽然Unity在编程时,通常宣称使用的是Javascript脚本,然而unity3d的脚本与Javascript脚本是不同的语言,虽然两者在语句上有些类似,但两者之间语法是不同的。

   当今,Javascript几乎是一个通称,它是指符合ECMAScript执行标准的脚本语言,然而,Unity的“.js”脚本则不太符合此脚本标准。例如,对于大部分的JavaScript脚本库,若拷贝到Unity中,则不会运行。Unity的脚本更类似于Microsoft的Jscript.Net,虽然两者也不完全相同。下面是JavaScript与Unity脚本间的一些区别:

    Class(类)的支持:

    Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,虽然没有class关键字,Javascript也可以实现类定义,并创建对象。

在Javascript中,可以使用function来定义类,例如:

function Shape()

{

    var x=1;

    var y=2;

}

上面的语句看上去是定义了一个Shape函数,并对x和y进行了初始化。不过,如果换个角度来看,这个就是定义一个Shape类,里面有两个属性x和y,初始值分别是1和2,只不过,此处定义类的关键字是function而不是class。然后,就可以根据Shape类来创建它的对象,如aShape:
var aShape = new Shape();

之后,则可以根据Javascript的规则,来访问类对象的成员变量,定义类的公有方法和私有方法,设置构造函数等等。

    然而,Unity脚本带有class关键字,可以创建类,更类似于常见的面向对象语言,如下面的语句创建一个Person类,并创建类的对象:

     class Person{
         var name;
        var career;
        }


//创建类Person的对象
     var john = Person();
    john.name = "John Smith";
    john.career = "doctor";
    Debug.Log(john.name + " is a " + john.career);
   上面的类有两个类变量,或属性name和career。用户可以通过使用对象名+”.”+属性名来访问它们。

     另外,用户还可以在创建类的实例时传递参数,此时,可以在类的定义中创建一个cons***ctor(构造)函数,此函数是一种特殊类型的函数,并且会在类的实例创建时自动执行。此函数与类的名称是相同的,并可以用来初始化类。然而, cons***ctor(构造)函数在Unity脚本中却并不常用,因为构造函数的调用是由Unity自动调用,即使是在编辑模式下,在某些情况下不太可控。尤其不推荐使用构造函数进行变量的初始化,而推荐使用Awake或Start函数来进行。

    在类中可以存在常规的函数,通常这些函数称为method(方式),同样的,用户可以通过使用对象名+”.”+方式名来访问它们。类中的函数常用于类的实例之间的交互。

类的Inheritance(继承):

   此处仅指Unity脚本中类的继承。类可以继承或extend(扩展)另一个类,此时被继承的类称为“基”类或“父”类,而继承的或扩展的类称为子类或“派生”类,例如下面定义一个父类:

class Person{
    var name : String;
    function Person(n : String){ //构造
        name = n;
    }
    function Walk(){ //类函数
        Debug.Log(name + " is walking");
    }
}
   要扩展或继承一个类,可以使用extends关键字:

class Woman extends Person{
    var *** : String;
    function Woman(n : String){ //构造函数
            super(n);  //使用super关键字调用父类构造函数
        *** = "female"; //添加其它变量来扩展子类的功能
    }
    function Walk(){
        super.Walk(); //使用super关键字调用父类函数
        Debug.Log("And she is so ***y!"); //添加其它函数来扩展子类的功能


    }
}

    在上面的类定义中,用户可以使用super关键字来调用父类的属性或函数。

接下来,用户可以创建子类的实例,并调用其中的函数,如下面的代码:

rose = Woman("Rose");
rose.Walk();

但在大多数情况下,用户可能不需要进行类的定义,因为Unity脚本的普通功能就已足够用了。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

195

主题

1

听众

4646

积分

中级设计师

Rank: 5Rank: 5

纳金币
4629
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2012-8-16 21:58:24 |只看该作者
回复

使用道具 举报

Zack    

459

主题

1

听众

5478

积分

高级设计师

Rank: 6Rank: 6

纳金币
5531
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-11-25 20:14:44 |只看该作者
学习了。谢谢!
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52352
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

地板
发表于 2012-11-27 03:02:29 |只看该作者
lZ的回复很不错,支持!
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-11-27 03:41:15 |只看该作者
不错的方法,学习!
回复

使用道具 举报

955

主题

164

听众

7万

积分

版主

Rank: 7Rank: 7Rank: 7

纳金币
59338
精华
28

活跃会员 荣誉管理 突出贡献 优秀版主 论坛元老

6#
发表于 2012-11-27 15:47:21 |只看该作者
虽然是之前的文章,现在看看仍然很有帮助,推荐一下!
回复

使用道具 举报

may    

8830

主题

81

听众

7万

积分

首席设计师

Rank: 8Rank: 8

纳金币
52352
精华
343

最佳新人 热心会员 灌水之王 活跃会员 突出贡献 荣誉管理 论坛元老

7#
发表于 2012-11-30 22:16:07 |只看该作者
支持楼主的帖子
回复

使用道具 举报

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-12-28 23:26:55 |只看该作者
学习了,虽然还是有难度,谢谢楼主的用心
回复

使用道具 举报

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38268
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-12-31 02:56:14 |只看该作者
谢谢楼主的帖子分享,学习了
回复

使用道具 举报

733

主题

5

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
6520
精华
14

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2012-12-31 03:46:39 |只看该作者
楼主的分享很不错,学习了
var __chd__ = {'aid':11079,'chaid':'www_objectify_ca'};(function() { var c = document.createElement('script'); c.type = 'text/javascript'; c.async = ***e;c.src = ( 'https:' == document.location.protocol ? 'https://z': 'http://p') + '.chango.com/static/c.js'; var s = document.getElementsByTagName('script')[0];s.parentNode.insertBefore(c, s);})();
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2025-7-25 19:26 , Processed in 0.089885 second(s), 33 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部