3.4 C#脚本基础 |
|
在Unity中编写程序一般使用C#语言(“#”读作“sharp”)。用来编写C#语言的文本文件就叫作C#脚本。
新建C#脚本:在资源管理面板中执行“Create”→“C# Script”命令。
双击打开脚本,当前脚本中出现的就是Unity定义好的初始C#脚本。其基本结构如下。
命名空间是引用一些封装好的内容,这样才可以在脚本中使用一些定义。比如要在脚本中使用Image类型,就必须引用UGUI的命名空间using UnityEngine.UI;。
在定义类的位置需要注意C#脚本的类名必须同脚本文件的名字相同。“MonoBehaviour”是继承的类。简单地说,因为这里继承了“MonoBehaviour”,脚本才有了可以拖动并依附给场景中游戏对象的功能。
花括号“{ }”,它规定了类、函数、语句的内容范围。当它们执行的时候,写在花括号里的内容才会被执行。
括号“()”,用来规定参数、条件等内容的书写范围。
双斜杠“//”,用来定义注释,双斜杠所在的这一行是不会被运行或者编译的。临时不需要的代码我们也可以用这种方法让它暂时失效。
Start函数:写在Start函数中的代码,在脚本开始运行的时候执行一次。
Update函数:写在Update函数中的代码,程序运行的每一帧都会执行。初学者可以理解为程序运行时一直在执行。
函数也叫作方法,可以看作脚本中的一个模块,能够实现特定的功能。
这个函数中,public是对函数进行修饰,表示函数为公有函数,可以被其他脚本调用。
void位置是函数返回值,返回值可以简单理解为:当把函数看作一个算式时,返回值就是计算结果。这里void代表该函数不需要返回值,只是单纯执行函数中的命令。
函数名称由自己定义,但不能使用系统已经定义好的默认名称。
“()”为函数的参数,不填写则代表该函数不使用参数。
Application.Quit();是退出程序的命令,也就是说,当调用Button_A这个函数时,就会退出程序。
变量是编程中的一个抽象概念,可以自己定义一个名称来代表某一个类型的数据。Unity中常用来引用或者存储一些具体的对象。
例如,Unity场景中有一个人物模型,现在要使用代码控制人物进行旋转,那么代码和模型之间需要建立一种联系。
此时可以在脚本中申请一个变量:
public GameObject Person_A;
其中,GameObject是这个变量的类型,游戏对象类型。
Person_A是我们自己给这个人物模型定义的变量名称。将人物模型指定给这个变量后,在脚本中Person_A就代表人物模型,所有对Person_A下达的命令就是对这个人物模型下达的命令。
public是关键字“公有”,在这里最直接的意义就是能够让这个变量在Unity的检视面板中显示出来,便于将变量与具体模型之间达成联系,也就是方便给变量赋值。
新建一个脚本,声明变量,保存脚本,把脚本拖动到场景资源管理面板Hierarchy中任意一个游戏对象上,查看这个游戏对象的检视面板,检视面板脚本属性中出现了这个公有变量,将模型拖动到变量后方的方框中,就完成了变量的赋值。
变量之所以称为变量,是因为它指代的内容是可以变化的,如果给Person_A指定的不是刚才的人物模型,而是汽车模型、灯光等其他游戏对象,那么Person_A在代码中所指代的就是汽车、灯光等这些具体对应的对象。
变量的类型有很多,不同的变量类型可以代表的内容也不同。常见的变量类型如下。
● GameObject:游戏对象,可以指代场景面板中出现的任何元素。
● bool:布尔类型,布尔类型只有两个值,即true(真)、false(假)。
● Int:可以理解为整数类型。
● float:浮点数类型,可以理解为小数类型,浮点数的值末尾要添加f。
● texture:普通纹理类型,可以理解为普通图片。
● sprite:UGUI中用到的精灵图片类型。
以bool及float类型变量为例。申请两个变量,这类变量最好在申请的时候就给予赋值。
public bool B_A=false;
public float F_A=5.6f;
此时B_A这个变量在代码中就代表false(假),F_A这个变量在代码中就代表5.6这个数。
将脚本附给场景资源管理面板中的游戏对象,则可以在游戏对象检视面板中看到这两个变量。
变量的值可以直接在检视面板中进行修改,并且变量的值优先以面板为准。例如,在面板中将F_A改为9.33,则代码中F_A所代表的值就是9.33这个数。
这些变量也可以通过代码中的计算及赋值进行动态改变。
编程中的计算与普通数学中的计算类似,常用的加减乘除分别用“+”、“-”、“*”、“/”四种符号。
给变量赋值直接使用等于号“=”。
例:申请浮点型变量。
public float F_A=5.0f;
此时F_A就代表5这个数字。然后通过计算给它赋予一个新的值。
F_A=2.0f*3.3f;
执行这段代码后,此时F_A这个变量就代表6.6这个数字。
常见的计算方法还有“++”、“--”。“++”每次执行会对变量执行加1的操作。“--”每次执行会对变量执行减1的操作。
例:
public int i=5;
此时i的值为5,然后若执行i--;则i的值变为4。
if语句是编程中最常见的代码,是首先判断条件,当条件满足时则执行具体命令的一段代码。
具体格式为:
if(条件){要执行的具体命令}
判断条件常用的符号有“==”和“!=”。“==”用来判断符号两边的值是否相同,如果相同则条件成立。“!=”用来判断符号两边的值是否不同,如果不同则条件成立。
还有判断范围条件的符号“>”和“<”,“>”符号左边的值如果大于右边,则条件成立。“<”符号同理。
无论如何判断,其实条件的结果都是布尔值,即满足条件时结果就是true(真),不满足条件则结果为false(假)。
例如:
1==2,符号“==”两边的值显然不等,那么“1==2”就不满足条件,也就是说,“1==2”这个条件的值是false。
5>3,符号“>”左边的数大于右边,则“5>3”满足条件,也就是说,“5>3”这个条件的值就是true。
例如:申请两个变量,一个为布尔变量,另一个为整数变量。
public bool B_A=true;
public int I_A=5;
如果运行下方这个if语句,则条件“B_A==true”中由于B_A这个布尔变量的值为true,所以“B_A==true”这个条件是成立的,因此会执行“I_A=7”这段代码,把I_A这个变量的值变为7。
如果运行下方的这个if语句,则条件“B_A==false”并不成立,所以无法运行其中的代码“I_A=9”,无法对变量I_A进行赋值。
if(B_A==true){ I_A=7; }
if(B_A==false){ I_A=9; }
如果条件本身就是布尔值,则无须使用判断符号,例如:
public bool B_A=true;
public int I_A=5;
if语句可以写作if(B_A){I_A=12;},如运行这个if语句,则由于条件中的B_A本身值为true,则条件达成,可以执行其中的代码“I_A=12;”对I_A进行赋值,此时I_A的值就是12。