该【C语言知识点 (2) 】是由【260933426】上传分享,文档一共【17】页,该文档可以免费在线阅读,需要了解更多关于【C语言知识点 (2) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
新建的脚本如下所示:
usingUnityEngine;//unity引擎的命名空间
;
publicclassTest:MonoBehaviour{
//Start进行初始化,只运行一次
voidStart(){
}
//Updateiscalledonceperframe每运行一帧,调用一次
voidUpdate(){
}
}
所有的程序语句,都由;号结尾
using命名空间;
什么是命名空间呢。一个命名空间会封装很多基本、常用的操作指令
只有引入命名空间,才能使用对应的操作指令
,HashTable,SortedList(目前完全用不到)
UnityEngineunity引擎的命名空间其中包含了所有Unity引擎自己常用的操作指令
类的概念
publicclass类名{}
public公有private私有
在private之后声明的东西(这个东西可以是类,也可以是变量)只允许在本类中使用
public之后声明的东西则无限制
注意:如果不用public和private声明,则默认是private
publicclass类名:父类名{}
这样声明的类,继承了父类所有的特性
MonoBehaviour的特性:
只要这个类里有Start这个函数,那么刚运行游戏的时候,调用一次Start
只要这个类里有Update这个函数,那么每一帧调用一次Update:.
注意:每一个能作为Gameobject组件的脚本,都必须继承于MonoBehaviour类
类和对象的关系:
对象的共性抽象为类
类的实例化,就是对象
放入Gameobject里的脚本,其实是脚本中类生成的对象
C#中的注释
什么是注释?对我们写的程序进行解释,注释是给人看的。
注释的方法
第一种:单行注释,到本行结束
第二种:多行注释/*开始,*/结束,之间的都为注释
快捷键:ctr+alt+c注释或取消注释(一行多行都可以)
文档注释:
在方法上面输入///,则MonoDevelop会自动生成如下注释
///<summary>//摘要、概要
///自己要写的方法注释
///</summary>
///<paramname="num1">参数1注释</param>
///<paramname="num2">参数2注释</param>
下面的一对指令,可以折叠一对代码
#regionxxx
#endregion
如果不生效,点击菜单Tool>Options>TextEditor>General>CodeFolding复选框都勾上即可
对象
对象是一种特殊的变量
对象声明的方法
,后赋值:类对象名称
Vector3position;
position=newVector3(,,);
注意:所有对象在第一次赋值的时候,必须用new来创建新空间
:类对象名称=值;
Vector3position=newVector3(,,);
,可以用逗号分隔
Vectore3p1,p2,p3;:.
Vector3三维向量,可以用来表示位置、旋转、缩放,也可以用来表示方向
Vector3是一个类,这个类有3个重要的成员变量x,y,z为float类型
Rect矩形框对象,用来表示一个screen中的矩形框
Rect有4个重要的成员变量x,y,width,height为int类型
X:矩形框左上角的x坐标
Y矩形框左上角的y坐标
Width:矩形框的宽度
Height:矩形框的高度
变量
计算机用内存储存数据
内存和数据的关系,就像旅馆和客人的关系一样
创建(声明)一个变量和旅馆类似
旅馆:
C#:
:数据类型变量名;例如:intnumber;//开一个能放数字的空间
:变量名=值;例如:number=3;//把3放进去
内存用于储存正在运行的程序数据
内存有个特点,断电后,里面数据丢失
一保存,就从内存中转移一份到外存中
变量,代表着一块内存空间,我们可以通过变量名向内存存/取数据
有了变量名,就不需要我们记忆复杂的内存地址
整数的数据类型叫int35-10范围:-2,147,483,648~2,147,483,647(U3D默认整数
类型)
long长整型
-+-(U3D默认小数类型)
-+-,占的内存空间
大,运算时间长
布尔型bool只有两个值truefalse占用空间最小
注意:在C#中,直接写一个有小数点的数字,这个数字是double类型:.
在一个小数后面加一个f/F,就是告诉编译器这个数字是float类型
字符型char‘A’‘b’‘男’只能存一个字符,并且这个字符要用单引号引起来
字符串型string“Helloworld”“大家好。”把0个或一个或多个字符连起来。字符串要求
用双引号引起来
变量声明的方法
intage;
age=18;
:数据类型变量名称=值;
Intage=18;
,可以用逗号分隔
stringzsName,lsName,wwName;
intweight=65,age=80;
变量的命名规范:
“字母”、_或@开头(不能以数字开头)
“字母”、数字、下划线
注意:C#大小写敏感。不要与系统的关键字重复
Camel(骆驼)命名法
首个单词的首字母小写,其余单词首字母大写
比如:studentName,zsAge,name
Pascal命名法
每个单词的第一个字母都大写
比如:SystemVersion
如果使用英文单词的缩写,全部用大写
变量设为公有,只能在函数外声明,函数内的变量都为私有
变量的作用域,在该变量所在的大括号内
赋值运算符号和赋值表达式
赋值符号”=”
a=a+1;这里的等号是赋值运算符,不是数学意义上的相等
变量可以被赋值,一旦给一个变量赋新值,那么变量中的旧值就不存在了
intage=10;
age=20;
print(age);
输出为20
+号在C#中有两个意义:
:.
注意:+号左右两边都是数字,是数字相加的意思
只要有一个是字符串,就是连接的意思
print语句与字符串
Print(xxx);在控制台输出一句话
占位符
stringmsg=(字符串,变量1,变量2,变量3…);中,第一个变量/字符串中可
以使用占位符
占位符由{数字}组成,数字由0开始编号
第1个占位符:{0},
第2个占位符:{1},
第3个占位符:{2},
…
例如:
publicstringmyName="张三";
publicintage=28;
publicintsalary=5000;
//Usethisforinitialization
voidStart(){
stringmsg=("我叫{0},今年{1}岁了,我的工资是{2}元。",
myName,age,salary);
print(msg);
}
一行程序可以回车键分成多行,但是不能把字符串或变量名从中间分开
字符串中的转义
问:能不能在字符串中输出双引号(英文的)?
在屏幕上显示:C#用的字符串用””号包起来。
stringmsg="C#用的字符串用\"\"号包起来。";
print(msg);
什么是转义字符:”\”加一个字符,组成转义字符,一般用于表示一些特殊符号
转义字符是一个字符
什么时候用?当我们需要在字符串中输入一些特殊字符的时候。比如:半角引号,换行,退格,就需要使用转义字符。
常用的转义字符:
\n换行
\b退格:.
\ttab键制表符多个空格,具有行与行的对其功能
\表示一个\
\”表示引号
@在字符串前面,表示不转义
\,不再理解为转义
@符号,在字符串上用两个双引号代表一个双引号
快捷键
Tab制表shift+tab反制表
U3d组件
Gameobject对象中默认包含了
transform组件
Transform组件中包含position(坐标位置)rotation(旋转)scale(缩放)三个Vector3的对
象
如何获取到这三个对象呢?
Position:Vector3v1=;
Rotation:Vector3v2=;
Scale:Vector3v3=;
=newVector3(0,0,0);//给自己设置位置
print();//显示自己位置
(x,y,z);//平移位置
获得别的Gameobject的坐标
1创建一个Gameo类的成员变量
publicGameObjectother;//成员变量
2在U3d视图的属性面板中给成员变量赋值(注意赋值方式)
3在函数里输出它的position值
print();//写在函数中
U3D的GUI(图形用户界面)
GUI的显示都在voidOnGUI(){}中完成
类似print(输出字符串);
GUI中显示一句话的命令:(矩形框,输出字符串);
(矩形框,输出字符串);
(矩形框,输出字符串);
OnGUI函数每帧运行一次:.
(矩形框,输出字符串);
当用户点击按钮的时候返回true。
创建一个单次按下按钮。用户点击按钮事件立即触发。
GUI文本输入
用法:
userName=(newRect(10,30,90,25),userName);//注意userName是同一个字
符串
用法:
passWord=(newRect(10,30,90,25),passWord,’*’);//输入的所有字符都
以*显示
Application
加载场景(关卡)
LoadLevel(index:int)
LoadLevel(name:string)
算数运算符及算术表达式
算数运算符:+、-、*、/、%(取模求余)是二元运算符
要求:只有数字类的变量可以进行这些运算符操作
参与运算的两个操作数的类型必须相同并且经过运算后的结果也与操作数的类型
相同
算数表达式:由算数运算符连接起来的式子比如1+1a-b(a、b变量前面已经声明并赋值)
优先级:先乘除,后加减,有括号的先算括号里的。相同级别的从左向右计算。
小括号可以无限套用,但一定要成对出现
知道某学生三门课的成绩80、90、
算数运算符:++、--(一元运算符)
++自加一,分前加和后加
--自减一,分前减和后减
一元运算符++/--比二元的+、-优先级高
intage=18;
intsum=age++-10;
上面代码age是后加,所以在语句运算时,age++取age原值参与运算,所以sum的值为8:.
intage=18;
intsum=++age-10;
上面代码age是前加,所以在语句运算时,++age先运算,所以sum的值为9
总之,不管++age还是age++,经过运算后,age的值都进行了+1运算。
intage=18;
intsum=age++-10;
在逻辑上相当于
intage=18;
intsum=age-10;
age=age+1;
intage=18;
intsum=++age-10;
在逻辑上相当于
intage=18;
age=age+1;
intsum=age-10;
复合运算符
+=age=age+3;相当与age+=3;
-=age=age-3;相当与age-=3;
*=age=age*3;相当与age*=3;
/=age=age/3;相当与age/=3;
%=age=age%3;相当与age%=3;
关系运算符
在C#中,有6个运算符,用于比较两个实物之间的关系
>
<
==//比较是否相等
!=//比较是否不相等
>=
<=
关系表达式:由关系运算符连接起来的式子
大象的重量(1500)>老鼠的重量(3)
兔子的寿命(3)>乌龟的寿命(1000)
39<18
String类型只能进行是否相等的判断
什么是bool(布尔)类型
关系表达式的运算结果为bool类型,bool类型只有两个值,一个是true,一个是false。
如果关系运算表达式成立,则这个表达式的值为true,否则为false。:.
例子:在计算机中描述张三(20岁)比李四(18岁)小,的结果
逻辑运算符
&&(与)||(或)!(非)
逻辑与运算:(二元)
boolanswer=表达式1&&表达式2
两个表达式要求都能解成bool类型。一般情况下都是关系表达式。
整个逻辑运算的结果也是bool类型
与运算,当两个表达式都为true是结果才为true
表达式1表达式2逻辑与结果
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse
逻辑或运算:(二元)
boolanswer=表达式1||表达式2
或运算,当两个表达式有一个为true是结果就为true
表达式1表达式2逻辑与结果
truetruetrue
truefalseTrue
falsetrueTrue
falsefalsefalse
例子:火车站规定一个人身高>=120cm或者体重>=50kg,就必须买票。写程序需要买票时
输出true,否则输出false。
inthight=130,weight=60;
boolresult=hight>=120||weight>=50;
print(result);
逻辑非(一元运算符)
用法:!(布尔类型的表达式)
作用:
如果布尔类型表达式为true,加!后,整个式子结果为false。
如果布尔类型表达式为false,加!后,整个式子结果为true。
表达式!表达式
TrueFalse
FalseTrue
下面式子的解读
5+3>4+2==true;
8>6==true;
true==true;
true;:.
与或的短路
inta=10;
intb=5;
boolresult=++a>5||++b>1;
print(a);
print(b);
结果a为11,b为5
类型自动转换规则
参与运算(算数运算和赋值运算)的操作结果类型必须一致。当不一致时,满足下面条件,系统自动完成类型转换:
比如int和float兼容
结果类型大于原类型
float>int
,如果一个操作数为float,则整个表达式提升为float型
自动转换中,转换是不会丢失精度的。常见的就是参与运算的两个操作数,一个int,一个
float,那么int会自动转换为float
类型强制转换
,商店为了结算方便,只收整数部分的钱,比如应该收
,现在只收166,应该如何做呢
语法:(数据类型名)待转换的值;
比如:intb=(int);
注意:强制类型转换,数据类型一定要兼容
下面的转换是错误的,因为强制类型转换要求待转换的类型和目标类型都为数字
//inta=(int)”33”;
字符串强制转换int:
stringa="123";
intb=(a);
字符串强制转换float:
stringa="";
floatb=(a);
C#中异常捕获用“try-catch”来完成
try
{
//有可能出错的代码
}
catch:.
{
//出错后的处理
}
如果try中的代码没有出错,则程序正常运行try中的内容。运行完后,不会执行catch中
的内容。
如果try中的代码一旦出错,那么try中的出错代码后面的代码不再执行,程序立刻跳入
catch。
gameObject相关
获得自己脚本的gameObject:gameObject;
print(gameObject);//显示该脚本对应gameObject的名称
获得场景中别的gameObject
方式1:创建一个公共的GameObje成员变量publicGameObjectxx;然后在场景中拖拽
赋值
方式2:(“xxx”);//其中xxx是gameObject的名字
方式3:(“xxx”)//查找标签
if结构
if(条件)
语句1;
执行过程:首先判断条件的结果,如果条件结果为true,则执行语句1,如果条件为
false,则跳过语句1.
注意:
,if语句只能带1句话,即和if语句有关的语句只有语句1.
实例:编程实现:如果张三考试成绩大于90分,那么爸爸奖励他100元。
intchengji=89;
if(chengji>=90)
print("给你100元,买糖去吧");
在if语句中,如果想让if带多句话,则可以用{}把想让if带的话括起来组成语句块。
if(条件){语句1;语句2;….语句n;}
if-else结构
语法:
if(条件)
{语句块1;}
else
{语句块2;}
执行过程:如果条件为true,则执行if带的语句块1,并且跳过else带的语句块2.
如果条件为false,则跳过if带的语句块1,并且执行else带的语句块2.
If-elseif嵌套:.
在if-elseif语句中,只有当上一个条件不成立时,才会进入下一个if语句,并进行if语句
后面的条件判断。一旦有一个if后面的条件为true,则执行此if所带的语句(块),语句
(块)执行完后,程序跳出if-elseif结构。如果所有if条件都不成立,最后如果有else,
则执行else所带的语句(块),否则什么都不执行。
Switch-case语句
需要判断一个定值(不是范围)时,可以用switch-case语句
语法:
switch(表达式)
{
case值1:语句块1;
break;
case值2:语句块2;
break;
……
default:语句块n;
break;
}
执行过程:首先计算表达式,然后根据结果匹配case后面的值,如果有匹配项,则执行匹
配项后面的语句,直到break语句跳出switch-case。如果所有case值都不匹配,那么有
default则执行default后面的语句,直到break结束。如果没有default,则跳出switch-
case,什么都不执行。
注意:匹配时和位置没有关系,只和值有关系。
当多种情况输出的语句一样时,可以合写。
If-elseif与switch比较
相同点:都可以实现分支结构
不同点:
Switch:不用一一判断,直接跳到需要分支
If-elseif:可以处理范围
状态机:用来让脚本在不同状态之间切换
举个最简单的例子:人有两个状态,健康和感冒,触发条件有淋雨,打针。
Bool淋雨=false;
Bool打针=false;
Intstate=0;//0为健康,1为感冒
Switch(state){
Case0://健康状态
//执行健康时运行的语句
Print(“健康中”);
If(淋雨){:.
State=1;
//执行切换时需要的语句
}
Break;
Case1://感冒状态
//执行感冒时运行的语句
Print(“感冒中”);
If(打针){
State=0;
//执行切换时需要的语句
}
Break;
}
枚举
语法:
enum自己起的类型名称{值1,值2,值3,….值n}
枚举的作用:,只能在定义枚举时列举的值中选择。
,只需要选择相应的值。
注意:,使用范围就是在该大括号中。
,值不能为数字,枚举类型的变量都可以强制转换为int。
,编号从0开始。
获得系统时间:(都为int类型)
循环结构
李四考试粗心了,爸爸让他写1000遍“下次考试一定要细心”
Print(“下次考试一定要细心”);
Print(“下次考试一定要细心”);
…
Print(“下次考试一定要细心”);
while循环语法:(特点:先判断,后执行)
while(条件)//条件叫做循环条件
{:.
要循环执行的语句;//循环体
}
执行过程:
,如果条件为true,则转向2,如果条件为false,转向3
,循环体执行完后,转向1.
,循环结束
注意:在循环体中,一定要有那么一句话,改变循环条件中某个变量的值,使得循环条件终有一天为false。
inti=0;//n次循环,i从0开始,则循环条件为i<n
while(i<1000){
print("下次考试一定要细心");
i++;
}
inti=1;//n次循环,i从1开始,则循环条件为i<=n
while(i<=1000){
print("下次考试一定要细心");
i++;
}
因为i控制循环次数,所以i又叫循环变量
dowhile循环语法:(先执行,后判断)
语法:
do{
循环体;
}
while(条件);
执行过程:
,执行完循环体转向2
,如果条件为true,转向1。如果条件为false,转向3
注意:假如循环条件一开始就为false,对于while循环,一次都不会执行。对于dowhile
循环,会执行一次。所以dowhile的循环体一般至少执行一次。
for循环
语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}:.
例子:
for(inti=0;i<1000;i++){
print("下次一定细心");
}
用while循环写1000次“下次细心”,经常会忘了写i++,对于已知循环次数的循环,用
for循环比较方便
执行过程:
,转向2
(循环条件,bool类型)。如果表达式2的值为true,
2的值为false,转向5
,执行后转向第4步
,转向第2步
For循环一般用于已知循环次数的循环
一般情况,表达式1用于定义循环变量和对循环变量初值。表达式2:循环条件。表达式
3:用于改变循环变量的值。
break:
-case判断中,用来跳出switch
,用来立即跳出(终止)循环
注意:用于循环中时,跳出的是break所在的循环
continue:
用于循环中,程序一旦执行到continue语句,立即结束本次循环(就是不再执行continue
下面的语句),直接进行下一次循环。(while/do-while,直接进行下一次循环条件的判断,
如果条件成立,则再次循环。对于for循环,先执行表达式3,再判断条件是否成立)
数学运算:mathf(在Unity圣典中找)
三元表达式:(三目运算符)
变量=表达式1?表达式2:表达式3
执行过程:首先计算表达式1(表达式1是一个能够计算成bool类型的值),如果表达式1
的值为true,则表达式2的值为整个表达式的值。如果表达式1的值为false,则表达式3
的值为整个表达式的值。
数组:
定义:可以帮我们一次声明多个同类型的变量。(这些变量在内存中连续储存)
数组声明语法:
数据类型[]数组名称=new数据类型[数组的长度]
例如:int[]scores=newint[5];
就声明了一个叫做scores的数组,里面包含5个int类型的变量。
数组名叫:scores里面的5个int类型变量叫做该数组的元素。:.
如何访问数组:通过下标(索引)来访问数组。
使用索引器访问制定编号位置的元素,访问数组元素索引器从0开始。
比如,我们向第0个元素赋值3,可以这样写:scores[0]=3;
Int类型数组一旦声
C语言知识点 (2) 来自淘豆网m.daumloan.com转载请标明出处.