Unity 初级游戏脚本开发 Part.1

       网上给初学者的内容其实很多,这里只是我自己在学习使用 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("其它键被按下");





待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容