欢迎来到天天文库
浏览记录
ID:8822552
大小:23.50 KB
页数:3页
时间:2018-04-08
《学习使用c#为unity3d编写脚本》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、学习C#进行unity3D编程Unity3D提供了三种可供选择的脚本编程语言:JavaScript,C#以及Boo。尽管它们各有各的优势与不足,但对我来讲C#显然会脱颖而出成为我的首选——首选,它完整支持面向对象,而且语法与Java以及ActionScript3很类似,而这两者都是我所熟悉的。不过在接触Unity3D之前,我一行C#的代码都没写过,所以我必须从头学起。C#由Microsoft提出并广泛使用于.NETframework以及Silverlight开发中。不过我们首先需要明白的是,学习用于Unity3D的C#并不等同于学习.NET平台,事实上你并不需
2、要了解所有关于.NET的事情就可以使用C#为Unity3D编写脚本程序。尽管我平时使用各种在线文档,但是一本实体书通常才是最好的助手,于是我决定买一本C#好书。O’ReillyC#PocketGuide看起来正是我所需要的,购买一本500页的C#圣经显然是没有必要的,因为那些书中大部分内容都是与.NET相关的,根本无法与Unity3D兼容。当然,仅仅依靠这一本书是不够的,你还需要经常查阅Unity3Dscriptingreference。文档中所有的例子都是用Javascript书写的,但是不必担心,一旦你熟悉C#后将它们翻译为C#语言将轻而易举。C#是一种非
3、常典雅而强大的编程语言,它的dot-syntax命名法则基于Java,所以如果你具有Java编程背景将感到非常舒服。不过区别也还是有一些的,最明显的应该是在C#中属性以及方法的名称约定俗称都是以大写字母开头的。我估计这是继承自VisualBasic的习惯,我并不是这种习惯的簇拥,但是与其反抗到底还不如接受它以保证代码的一致性。C#的特性列表实在太长,这使得ActionScript实在是看起来有些相形见绌。C#与Actionscript从本质上是极为相似的,我估计下一次ActionScript的升级中至少会实现C#的一些特性,因此有必要在此预先有所了解。下面是我
4、所钟爱的一些特性。运算符重载这是目前为止最酷的!它允许程序员为+-*/这样的运算符定义特殊的行为。它的优势在向量加法运算中就可以明显体现出来,在ActionScript中,要计算向量之和,你需要书写类似下面的代码:varc:Vector3D=a.add(b);这样并不是很好,在多于两个向量相加时代码的易读性会变得很差。如果在C#中重载+运算符,代码将会变成下面的形式:Vector3c=a+b;这样是不是可读性更好而且更为优雅呢?不用想我们就可以猜到,在Unity3D中所有向量的运算符都进行了重载。如果你希望自己实现,运算符重载也非常简单,对于上面的例子,代码大
5、致是下面这个样子的:publicstaticVector3operator+(a:Vector3,b:Vector3){returnnewVector3(a.x+b.x,a.y+b.y,a.z+b.z);}这其中有一些简单的规则:运算符函数永远都是静态的(static),并且需要返回它所定义的对象类型。不过它的参数可以是任何类型的,因此完全可以重载加法或乘法运算符使其支持向量与浮点数或者与矩阵的运算——而这一切都要得益于C#对运算符重载功能的支持。方法重载方法重载可以允许我们定义多个同名但参数不同的方法。它不但对一般方法起作用而且也可以应用于构造函数——如果有
6、多种途径来初始化一个对象,那么你可以为每一种途径定义一个专有的构造函数。而且方法重载同样可以应用于运算符方法,这一点上面已经提到了。在Unity3DAPI中一个关于运算符重载最好的例子就是’Transform.Rotate()’这个方法,它被重载了三次以满足不同的旋转参数:voidRotate(Vector3eulerAngles,SpacerelativeTo)voidRotate(floatxAngle,floatyAngle,floatzAngle,SpacerelativeTo)voidRotate(Vector3axis,floatangle,Spa
7、cerelativeTo)你可以指定欧拉角,也可以指定旋转轴以及旋转角度。ActionScript可以使用默认参数来模拟方法重载,但是这样做并不方便也不便于理解。Getter/Setter语法C#声明参数的方法非常简明扼要,在ActionScript中需要两个方法——一个’get’一个’set’,而在C#中的代码则是这样的:publicfloatSize{get;set;}在这种情况下,你不需要额外做任何工作编译器就会自动创建一个私有属性,当然,这样的定义没什么用处,下面列举一个稍微复杂点的,包括一个public的get以及private的set:public
8、floatArea{get{retur
此文档下载收益归作者所有