变量
- 数值变量。
var a=1000;
var b=3.1415926;
- 字符串变量。
是由单引号或双引号括起来的 Unicode 字符序列。
- 布尔值。
只有 true
和 false
。用来描述某个事物为真或为假。
- 数组
是数据的集合,数组中的每一个元素都有自己独有的下标,下标从0
开始计数。
表达式和运算符
表达式是关键字、变量、常量和运算符的组合,可以用于执行运算、处理字符或测试数据。
运算符:
- 算数运算符(二元运算符)指的是数学中最基本的加减乘除等运算。
算数运算符 | 描述 | 示例 |
---|---|---|
+ | 两变量相加 | a + b |
- | 两变量相减 | a - b |
* | 两变量相乘 | a * b |
/ | 两变量相除 | a / b |
% | 求余数 | a % b |
++ | 变量递增 | a++ |
-- | 变量递减 | a-- |
- 相等运算符用于比较两个值。以返回布尔值作为比较结果(可归为关系运算符)。
相等运算符 | 描述 | 示例 |
---|---|---|
== | 判断两变量是否相等 | a == b |
=== | 判断两变量是否完全相等 | a === b |
!== | 判断两变量是否不相等 | a !== b |
!=== | 判断两变量是否完全不相等 | a !=== b |
- 关系运算符用于判断两个值之间的关系,以返回布尔值作为判断结果。
关系运算符 | 描述 | 示例 |
---|---|---|
< | 小于 | a < b |
<= | 小于或等于 | a <= b |
> | 大于 | a > b |
>= | 大于或等于 | a >= b |
- 赋值运算符用于将
=
右边的值赋给左边的变量,该值为任意类型的值。
var a = 1;
var b = a;
var c = abc;
注:
b = a = 1,而不是字母a。
- 逻辑运算符用于针对布尔值的操作。
逻辑运算符 | 描述 |
---|---|
&& | 并(与) |
|| | 或 |
! | 非 |
- 其他运算符。
除以上常见运算符外,还有:
- 按位运算符。
- 条件运算符。
- typeof 运算符。
- new 运算运算符。
- delete 运算符。
等等。
语句
JavaScript 提供了完整的基础编程语句,如下:
- var 语句。
var 变量名 = 值
- 函数定义语句 。
function 函数名(参数){
执行语句
}
- 条件和分支语句。
- 条件语句
if...else
完成程序流程快中的分支功能:如果其中的条件成立,则执行if
后子语句;如果条件不成立,则执行else
后子语句。
if(条件){
子语句1
} else{
子语句2
}
- 分支语句
switch
可以根据一个变量的不同取值采取不同的处理方法。
如果表达式中取的值与分支语句中的任何一条子语句都不匹配,将执行 default(默认语句)中的语句。
switch(expression){
case label1:子语句1
case label2:子语句2
...
default:子语句n
}
- 注释语句:
//
,/*....*/
用于做注释,便于阅读代码,理解代码。
//这是单行注释
/*
这可以是多行注释
这可以是多行注释
这可以是多行注释
*/
- 循环语句:
for
,for...in
,while
。
for
语句中只要条件成立,循环体语句就会循环执行。
for(条件){
子语句
}
注:
若条件一直成立,将进入死循环,要避免这种情况出现。
while
语句所控制的循环不断的判断条件,如果条件始终成立,则一直循环直到条件不再成立。
while(条件){
子语句
}
for...in
语句用于将一个对象的属性不断赋值给变量,直到将该对象的属性都枚举完。
for (variablename in object){
statement
}
注:
break
语句用于结束循环,并执行循环体的下一条语句。
continue
语句用与结束本次循环,并马上开始下一次循环。
函数
函数(function)是一个可执行的程序段。函数被定义后,可以多次被程序调用。
函数是命名的程序段,这个程序段可以被当作一个整体引用和执行。使用函数时要注意以下几点:
- 函数由关键字
function
定义(也可由Function
构造函数构造)。
- 使用
function
关键字定义的函数在一个作用域内是可以在任意处调用的。
- 函数名是调用函数时引用的名称,它是大小写敏感的,调用函数时要注意这一点。
return
语句用于返回表达式的值
Unity 3D C# 脚本基础
变量
- 变量定义。
任何一个脚本中都缺不了变量,C# 脚本也不例外。
变量主要用于存储数据,在 Unity 3D 的脚本中,每个变量必须拥有唯一的名称,脚本在识读变量时采用的是字符串匹配方式,所以对变量名称大小写敏感。
一旦 Unity 3D 脚本挂到某个 Unity 3D 对象上,在 Unity 3D 的属性面板中就会显示出该脚本中的各个公共变量。开发人员也可以在属性面板中对公共变量的值进行设置,设置后的值将会影响脚本的运行,相当于在脚本中对该变量进行了赋值。
在 Unity 3D 中,定义 C# 变量的格式如下:
数据类型 变量名称
int age;
- 变量赋值。
可以通过对变量赋值来对其初始化,赋值时使用赋值运算符“=”。
赋值的格式有两种,一种是
int age;
age=5;
另一种是以字面形式初始化,形式如下:
int age=5;
- 变量的数据类型。
变量有 6 种数据类型。
- 整数类型
整数类型的变量取整数数值。C# 将整数分为 8 种类型,如下表所示。使用时,根据数值的可能大小,选择范围最小的类型,一般常用的类型为 short、int 和 long 3 种。例如:
byte classSize=23;
ushort student=2344;
选项 | 描述 | 取值范围 |
---|---|---|
sbyte | 有符号 8 位整数 | -128 〜127 |
byte | 无符号 8 位整数 | 0 〜255 |
short | 有符号 16 位整数 | -32768〜32767 |
ushort | 无符号 16 位整数 | 0〜65535 |
int | 有符号 32 位整数 | -2147489648〜2147483647 |
uint | 无符号 32 位整数 | 0〜42994967295 |
long | 有符号 64 位整数 | -2⁶³ 〜2⁶³ |
ulong | 无符号 64 位整数 | 0 〜2⁶⁴ |
- 浮点类型
浮点类型变量主要用于处理含有小数的数值数据。根据小数位数不同,C# 提供了单精度浮点类型 float
和双精度浮点类型 double
,例如:
float angles=36.5f;
double rate=0.253D;
C# 的浮点类型如下表所示。
选项 | 描述 | 取值范围 |
---|---|---|
float | 32位单精度浮点类型 | -2¹²⁸〜2¹²⁸ |
double | 64位单精度浮点类型 | -2¹⁰²⁴〜2¹⁰²⁴ |
- 布尔类型
布尔(bool)类型表示真或假,布尔类型变量的值只能是 true
或 false
,不能将其他的值赋给布尔类型。例如:
bool b=true;
在定义全局变量时,若没有特殊要求,不用对整数类型、浮点类型和布尔类型的变量进行初始化,整数类型和浮点类型的变量默认初始化为 0
,布尔类型的变量默认初始化为 false
。
- 字符类型
为保存单个字符,C# 支持字符(char)类型,字符类型的字面量是用单引号括起来的。一些特殊字符要用反斜线\
后跟一个字符表示,称为转义字符,如下表所示。
转义字符 | 描述 |
---|---|
\' | 单引号 |
\" | 双引号 |
\\ | 反斜线 |
\0 | 空 |
\a | 报警 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
- 引用类型
引用类型是构建 C# 应用程序的主要数据类型,C# 的所有引用类型均派生自 System.Object
。
引用类型可以派生出新的类型,也可以包含空(null
)值。引用类型变量的赋值只复制对象的引用,而不复制对象本身。 枚举类型 枚举类型为定义一组可以赋给变量的命名整数常量提供了一种有效的方法。
编写日期相关的应用程序时,经常需要使用年、月、日、星期等数据。可以将这些数据组织成多个不同名称的枚举类型。
使用枚举类型可以增强程序的可读性,在 C# 中使用关键字 enum
类声明枚举类型的变量,格式如下:
enum枚举名称
{
常量1=值1;
常量2=值2;
...
常量n=值n
}
变量的声明
声明变量就是指定变量的名称和类型,未经声明的变量不能在程序中使用。
在 C# 中,声明一个变量由一个类型和跟在后面的一个或多个变量名组成,多个变量之间用逗号分开,声明变量以分号结束。例如:
int age=30;
float rate=20f;
string name="Tom";
在 C# 的变量声明之前还可以添加访问修饰符:
private
(默认修饰符),只能在本类中访问。
protected
,只能在类或派生类中访问。
internal
,只能在本项目中访问。
如果想让脚本中定义的变量在 Unity 3D 中的 Inspector
面板上显示,必须用 public
修饰。
在声明变量时,要注意变量名的命名规则: 变量名必须以字母开头; 变量名只能由字母、数字和下画线组成,而不能包含空格、标点符号、运算符等其他符号; 变量名不能与 C# 中的关键字名称相同; 变量名不能与 C# 中的库函数名称相同。
表达式和运算符
- 表达式。
表达式是由运算符和操作数组成的。
运算符设置对操作数进行什么样的运算,例如,加、减、乘、除都是运算符。
操作数是计算机指令的组成部分,它指出了指令执行的操作所需要的数据来源。
操作数包括文本、常量、变量和表达式等。例如:
int i=256;
i=256/2+125;
int j=2;
j=j*j-2;
- 运算符。
运算符用于执行表达式运算,会针对一个以上操作数进行运算。例如 2+3,操作数是 2 和 3,而运算符是+
。
运算符的种类很多,包括算术运算符、简单赋值运算符、关系运算符、位逻辑运算符、位移运算符以及特殊算术运算符等,与 JavaScript 类似,在此不再赘述。
语句
- 顺序执行语句。
当表达式中有多个运算符时,需要考虑运算符的执行顺序,也就是运算符的优先级。
例如,要对一本书的信息进行记录,书名为《程序设计语言》,价格为 36.5 元,书的编号为 243434。在代码中定义 3 个变量 bookName
、Price
、bookID
分别用来保存书名、价格以及编号,并分别对这3个变量进行赋值和输出,代码如下:
class Program
{
static void Main(string[]args){
string bookName="程序设计语言";
Console.WriteLine("书名"+bookName);
float Price=36.5f;
Console.WriteLine("价格"+Price);
string bookID="243434";
Console.WriteLine("编号"+bookID);
}
}
在该实例中,首先定义变量,为其赋值,然后输出变量的值,程序是自上而下地一行一行顺序执行。
- 选择分支语句。
在日常生活中,并非所有的事情都能按部就班地进行,程序也一样。为了实现一定的目标,经常需要改变程序语句执行的顺序。
在程序中,有时需要在满足某种条件时再执行某一语句。为了达到目标而进行选择的语句就是选择分支语句。
if
语句。
一个 if
语句后可跟一个可选的 else
语句,else
语句在布尔表达式为假时执行。C# 中 if…else
语句的语法如下:
if(布尔表达式){
如果布尔表达式为真执行的语句
}else{
如果布尔表达式为假执行的语句
}
如果布尔表达式为 true
,则执行 if
块内的代码;如果布尔表达式为 false
,则执行 else
块内的代码。
一个 if
语句后可跟一个可选的 else
if…else
语句,这种形式可用于测试多种条件。C# 中 if…else
语句的语法如下:
if(布尔表达式1)
{当布尔表达式1为真时执行的语句}
else if(布尔表达式2)
{当布尔表达式2为真时执行的语句}
else if(布尔表达式3)
{当布尔表达式3为真时执行的语句}
else
{当上面的条件都不为真时执行的语句}
switch
语句。
当程序做条件判断时,可以用 if…else
语句,但是当条件很多时,如果还用 if…else
语句是很麻烦的。为了解决这个问题,C# 设置了分支语句 switch
。其语法格式如下:
switch(值)
{
case值1:语句1;
break;
case值2:语句2;
break;
····
case值n:语句n;
break;
}
当 switch
后面的值取某一值时,就执行相应 case
后面的语句。例如,当值是值 1 时,执行语句 1;当值是值 2 时,执行语句 2……当值是 n 时,执行语句 n。
- 循环语句。
do…while
循环。
do…while
循环是在循环的尾部检查条件。 do…while
循环与 while
循环类似,但是 do…while
循环至少会确保一次循环。
C# 中的 do…while
循环语法如下:
do{
语句
}while(条件);
条件表达式出现在循环的尾部,所以循环中的语句会在条件被测试之前至少执行一次。如果条件为真,控制流会转回上面的
do
,重新执行循环中的语句。这个过程会不断重复,直到给定条件变为假为止。
while
循环。
在 C# 中 while
循环是常用的一种循环语句,while
循环的特点是直到条件为假时才跳出循环。C# 中的 while
循环的语法如下:
while(条件)
{语句}
在这里,语句可以是一个语句,也可以是几个语句组成的代码块。条件可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环;当条件为假时,程序流将继续执行紧接着循环的下一条语句。
while
循环的关键点是循环可能一次都不会执行。当条件测试的结果为假时,会跳过循环主体,直接执行 while
循环的下一条语句。
for
循环。
for
循环适合指定循环次数的应用,在使用时,需初始化一个作为计数器的变量值。例如:
for(int i=1;i<=10;i++){
Console.WriteLine("{0}, i");
}
上面的 for
语句声明了计数器变量后,使用分号分开,接着给出条件判断的表达式 i2=10
,再使用分号分开,最后给出对计算器变量的操作 i++
。如果把 i++
放在循环体内也是可以的。
函数
在 Unity 3D 中,C# 脚本需要预先载入类库,代码示例如下:
using UnityEngine;
using System.Collections;
public class NewBehaviourScript:MonoBehaviour{
}
其中,NewBehaviourScript
是脚本的名称,它必须和脚本文件的名称一致(如果不同,脚本无法在物体上被执行)。
所有游戏执行语句都包含在这个继承自 MonoBehaviour
类的自创脚本中。
Unity 3D 脚本中的常用函数如下:
Update()
正常更新,创建 JavaScript 脚本时默认添加这个方法,每一帧都会由系统调用一次该方法。
LateUpdate()
推迟更新,此方法在 Update()
方法执行完后调用,每一帧都调用一次。
FixedUpdate()
置于这个函数中的代码每隔一定时间执行一次。
Awake()
脚本唤醒,用于脚本的初始化,在脚本生命周期中执行一次。
Start()
在 Update()
之前、Awake()
之后执行。Start()
函数和 Awake()
函数的不同点在于 Start()
函数仅在脚本启用时执行。
OnDestroy()
当前脚本销毁时调用。
OnGUI()
绘制游戏界面的函数,因为每一帧要执行多次,所以一些时间相关的函数要尽量避免直接在该函数内部使用。
OnCollisionEnter()
当一个游戏对象与另外的游戏对象碰撞时执行这个函数。
OnMouseDown()
当鼠标在一个载有 GUI
元素(GUI Element)或碰撞器(Collider)的游戏对象上按下时执行该函数。
OnMouseOver()
当鼠标在一个载有 GUI
元素或碰撞器的游戏对象上经过时执行该函数。
OnMouseEnter()
鼠标进入物体范围时执行该函数。和 OnMouseOver()
不同,OnMouseEnter()
函数只执行一次。
OnMouseExit()
鼠标离开物体范围时执行该函数。
OnMouseUp()
当鼠标释放时执行该函数。
OnMouseDrag()
按住鼠标拖动对象时执行该函数。