网上给初学者的内容其实很多,这里只是我自己在学习使用 Unity过程中的一些笔记,文中所用的主要语言是C#,在写下这些的同时希望能提高一下自己的水平。
这是我第一次写这种内容,可能会有一些疏漏,我尽量将多囊括一些东西,主要是加强理解,能帮到一下和我一样刚入门的小白就更好了。
一些更加丰富的内容我会在以后自己遇到相关问题时另外写出来分享的。
1.脚本是行为组件
与Unity中其他类似组件(Component)一样,可以通过Add Component按钮替下的New Script所选择的对象加上脚本,也可以直接将脚本拖到Hierarchy视图中的对象上等很多方法。
脚本可以用来实现游戏对象的其他各种行为,试着把脚本当作你自己创建的组件,你可以对游戏中的不同对象创建行为,可以使角色、环境或者管理游戏的某些功能,实际后面会有很多脚本相关的内容,这里只是开个头。
2.变量(Variables)与函数(Functions)
变量可以比作装满了水果的箱子,不同的水果要装在不同的箱子里,放苹果的箱子里只能放苹果,放香蕉的箱子里只能放香蕉。
定义变量的方法一般是 type nameOfVariable = value;例如int myInt = 5;(分号不能少)
要定义变量就首先要确定它的类型,比如int这个词,代表了整形数(integer),或者说是一个整数(a whole number),myInt则是这个变量的名字,5就是赋给myInt这个变量的初始值。
语句的第一部分,即等号前的部分为声明,等号后的第二部分为初始化,在初始化中可以对变量进行赋值,但是初始化中所赋的值并不会一直保持不变,举个例子:
int myInt = 5;
void Start(){
Debug.Log(myInt*2);
}
此时在Unity的Console栏中则会显示10,表示此时myInt的值变为了10(Start函数在脚本所附的对象进入场景时被调用)。
再举一个例子:
int myInt = 5;
void Start(){
myInt=55
Debug.Log(myInt*2);
}
这时候Console中的值就会变成110。尽管它被初始化为5,在start中就又将它重新赋值为55。
想要用这些变量做更多的事情,就需要用到函数(Function),或者叫方法(Method)。函数可以使用这些装着苹果或香蕉的箱子,也可以给我们返回一些箱子(Return),上面例子所用的Start函数,可以作为不返回任何东西的函数的例子,所以它的类型是void,在我们自己写函数的时候,可以指定返回的箱子的类型,再举一个例子:
myInt=5;
void Start(){
MultiplayByTwo(myInt);
}
int MultiplayByTwo(int number){
int ret;
ret = number *2;
return ret;
}
例子中,int number这里创建了一个临时的变量number,用它来给函数传入一个数,在函数内部还创建了一个临时的变量ret,然后对其进行操作,最后将得到的ret返回,在Start函数中可以通过MultiplayByTwo这个函数名加()调用到这个函数,并且在括号中加入了和MultiplayByTwo函数中一样类型的变量,最后得到的结果应该是10。在Start函数中,我只是调用了MultipyByTwo,所以MultiplayByTwo(myInt)现在就代表10,在我使用这个信息之前,什么值都没有变,myInt的值也没有因为这个函数的返回值而改变,比如,我要myInt等于函数的返回值,可以将Start函数中改为myInt=MultiplayByTwo(myInt),这样myInt的值也就改变了。
更加深入的内容后面还会涉及到,这里主要帮助理解下什么是变量,以及使用函数可以利用这些变量。
3.脚本规范及语法
语法代表了语言的结构,而规范则可以使代码更可读和易写,例如点操作符,点操作符是句点,句点出现在代码的词间,它的工作方式类似于写地址,举个例子:Debug.Log(transform.position.x),这里的Debug可以视为国家,Log可以视为城市;再看括号里的内容,transform相当于国家,position相当于城市,x则相当于我们要找的街道。所以点操作符实际上让你可以分开或者访问到unity里的一个复合对象中的元素,复合对象就是包含了很多元素的对象,比如transform含有position,rotation和scale,例子里的点操作符可以用来选择position,position又包含了x,y,z,可以再通过点操作符获取x。
下面再说分号,C#中分号是用来完结一个语句的,但是不是所有的代码都算语句,比如类定义或者函数的开闭,就是{ },任何使用花括号的都不需要再结尾加上分号,而花括号之间的语句则都需要以分号结尾。尽量用英文输入法的分号,不然容易报错。
缩进是代码易读性的关键,虽然不是出于技术需要,但是它可以使代码看上去结构清晰,也可以很好地体现自己地编程思维,让别人也能更好地理解自己所写的东西。
最后再说说注释,注释往往是帮助自己或者别人理解代码用的,它并不会被编译。注释主要又两种写法,第一种就是双右斜线,例如://这是一句注释,这种注释主要用再单行注释,而当需要将一大段代码注释掉的时候则会使用如:/* 需要注释的内容*/。注释有时候还能暂时禁用部分代码,当你暂时不需要某段代码时,可以先将这部分代码注释掉,这样可以将它保留下来以后备用。
4.C#与JavaScript的语法区别
Unity里的脚本都包含1个或者更多的类,C#脚本会写上class声明,但是在JavaScript里声明时隐藏的,意思时你在这里写的都自动包含在类当中,和写在C#中class的两个花括号中间是一样的。
C#的变量声明以变量类型开始,后接变量名称,后面可选是否赋值,标准格式为type nameOfVariable = value;。 JavaScript的变量声明是以var关键词开始的,然后加上变量名称,之后可以通过加不加冒号选择是否声明类型,声明变量时确定其类型是个好的代码习惯,接着可选是否给其赋值,如果顶部有#pragma stric表示此时处于严格编程模式,就必须要在变量名后声明类型。标准格式为var nameOfVariable :type =value;。
C#的函数声明是以返回值开始的,没有返回值时用void类型,接着是函数名,再接着是参数列表,就是一对括号,函数的内容写在里边,标准的格式是return FunctionName(type parameterName),例如void Start(){ }和int MultiplayByTwo(int number){ },注意有返回值时函数里必须有return内容。 JavaScript的函数声明是以function关键词开始的,接着是函数名,然后是参数列表,类似于设置变量类型,可以用冒号指定函数返回值类型,标准的格式是function FunctionName(parameterName:type):return,例如function MyFunction(number:int):int{ } 。
C#与JavaScript的另一个关键区别是默认访问修饰符,C#默认是private,而JavaScript则是public,private和public具体的差别在后面也会讲到。
5.if语句
无论在使用何种语言进行编程时,基本都会使用到if语句,当需要基于条件进行判断时就会用到它,if语句可以单独使用,标准格式是if(){ },括号中写判断语句,一般为bool类型,当其为true时,会接着执行后面花括号里的语句,当其为false时则不执行,在C#中,当if语句中需要执行的语句只有一句时,可以省略两个花括号。如:
if(Input.GetKeyDown(KeyCode.Space))
Debug.Log("空格键被按下")
if语句的一个扩展是if else语句,当进行多个条件的判断时可以用到,例如:
if(Input.GetKeyDown(KeyCode.Space))
Debug.Log("空格键被按下");
else if(Input.GetKeyDown(KeyCode.Escape))
Debug.Log("ESC键被按下");
else
Debug.Log("其它键被按下");
待续