Unity 3D游戏编程自学#1——C#基本语法

1.如何开始

打开Visual Studio,左上角:文件—新建—项目,选择以下项

创建即可。

创建该项目的同时会创建一个解决方案,一个解决方案下可以有多个项目,每个项目下可以有多个类。

要打开一个解决方案,打开.sln后缀名的文件即可。

要打开一个项目,打开.csproj后缀名的文件即可。

一些规则:

驼峰命名法:组成变量名的所有单词首字母大写(第一个除外),该法则一般用于变量的命名。

例如:intArray、userName

帕斯卡命名法:所有单词首字母都要大写,一般用于给函数和类命名。

例如:GetNumber、ReadKey

对于常量,一般全大写,单词之间用下划线分开,例如:SERVER_IP

 

2.float类型赋值问题

float f = 1.1;

错误!1.1默认为double型,正确的应该在末尾加一个字母f:

float f = 1.1f;

double型直接赋值即可。

 

3.在C#中char类型可以放一个中文单字

 

4.C#中“+”的特殊用法

若char和整数、小数相加,则char会转为其对应的ASCII码的值。

若“+”左右有字符串string,则分两种情况:

int b = 22;
string s = "BBB" + b;
Console.WriteLine(s);
Console.WriteLine(s + b);

第一种情况下,两者相连,b被转换为字符串加入到s中,输出为BBB22

第二种情况,输出时,先输出s然后直接输出b,中间无空格无换行,输出为BBB2222

 

5.占位符

string name = "Zerg";
int age = 20;
string gender = "男";
Console.WriteLine("我的名字是{0},我今年{1}岁,我的性别是{2}",name,age,gender);

占位符为{0}、{1}、{2},从0开始。占位符与变量一一对应。少了无影响。多了会报错。

实际上可以调换顺序。

Console.WriteLine("我的名字是{1},我今年{2}岁,我的性别是{0}", name, age, gender);

输出为:我的名字是20,我今年男岁,我的性别是Zerg

 

6.转义字符

回车:\n     英文双引号:\"       Tab键:\t    退格键:\b    一个\:\\

若要使字符串中的转义符号全部失效(即字符串里面是什么就输出什么,常用于路径的处理),则在字符串前加“@”

string s = @"C:\Program Files\Adobe";

 

7.输入输出

Console.Read():

返回读入值的ASCII码,返回值是int型。举例:

int a = Console.Read();
Console.Write(a+" ");

输入0和回车,输出:48 13 10 

因为0的ASCII为48,回车符的为13,换行符的为10。

同理,输入AB和回车,输出:65 66 13 10 

Console.ReadLine():

读取一行用户的读入,返回的是字符串。

String s = Console.ReadLine();

Console.ReadKey():

读取任意一个值后返回,常用在程序末尾起“按任意键退出”的作用。

Console.Write()和Console.WriteLine():

输出内容,后者比前者多输出一个换行。

前者必须要有输出内容,后者括号内可以为空(就输出一个回车)。

 

8.类型转换

int型的值可以直接转换为float或者double型,即int型变量可直接赋值给float和double型,float型变量也可直接赋值给double型。

相反则不行,需要强制转换,要额外添加代码:

float a = 1.7f;
int b = (int)a;

结果是截去小数,只留整数部分。同理,double转为float要加:(float)

此外,若要将string类型转为int或double,则:

string s1 = "12.34";
string s2 = "23";
double m1 = Convert.ToDouble(s1);
int m2 = Convert.ToInt32(s2);

convert函数中没有ToFloat

拓展:数字转字符串:

string s;
int a = 10;
s = "" + a;

 

9.数组

与C++不同,以C++中int intArray[100];为例

int[] intArray = new int[6];

C#中的这个“6”只的是可以取0到5一共6个数组下标。

在函数中,若数组为形参,写法:

static void Work(int[] intArray)

初始化:

和一般的变量不一样,数组中的默认值均为0(无论是int、float、double还是bool),可以直接使用(变量则不能)。若要初始化:

int[] intArray = new int[6] { 1,2,3,4,5,6 };

若要初始化,则要一一对应,不能多也不能少。

在初始化时,可以:

int[] intArray = new int[] { 1,2,3,4,5,6 };

系统会自动计算初始化的数量以确定数组范围。

数组长度:数组名.Length。以以上为例是:intArray.Length

二维数组的定义、初始化及其调用:

int[,] intArray = new int[2, 2] { { 1, 2 }, { 3, 4 } };
intArray[1, 1] = 100;

一种新的数组遍历方法:

10.引用传递

int[] intA = new int[] { 0, 1, 2, 3 };
int[] intB = intA;
intB[2] = 100;
Console.WriteLine(intA[2]);

如上述代码,对于所有的数组类型(包括string)在执行将数组intA赋值intB时同样将intB的内存地址覆写为intA的地址,因此更改intB的值,intA也相应改变,反之亦然。

 

11.函数

写在class Program里面,static void Main之后(都在void Main后面即可,具体顺序无需操心)。

除了前面多个static,其他与C++一样

文档注释:

连续写三个“/”,这种注释方式一般用于给类和函数注释。

“加和函数”的位置一般描述函数功能,参数1、2的位置描述参数,“两数之和”位置描述返回值。完成注释后,调用该函数时会有以下效果:

函数重载:

多个相互之间参数都不同的函数,其函数名可以相同。

例如将两个double相加的函数,和将两个int相加的函数,函数名都可以为Add。

注意:

若使用函数重载,区分是由参数区分的,同名的函数中,不能有参数相同的(参数数量相同,类型不同,或者类型相同,数量不同)。

返回值与函数重载无关,不能以返回值的不同来区分同名函数。

函数高级参数:

ref:在讲实参传入形参的时候,不采用值传递,而采用引用传递。

也就是说,函数内形参的值发生改变,外面的实参也发生改变。

编写参数表和调用时都需要加上关键字“ref”。

//参数表
static void Add(ref int x,int y)
//调用
Add(ref a,b);

注意:若使用到ref,则实参在传入函数前必须要有值。

out:若函数要返回多个值,则可以将所需返回的值写于参数表中,之前加上out关键字,在调用的时候也需要加上out关键字。

无论函数本身是否有返回值,都可以使用out。

注意:使用out的变量在函数中必须要有赋值。

 

12. 字符串操作

大小写转换

string s = "Zerg";
s = s.ToUpper();
s = s.ToLower();

将字符串中所有小写字母转为大写:ToUpper

将所有大写转为小写:ToLower

字符串中若有非字母字符,一样可以用,不会报错。

字符串分割、截取

char[] c = new char[] { '@', '#' };
string s1 = "aab#bb3#65@2";
string[] stringArray = s1.Split(c);

将字符串s1按c中的字符为分隔符分开,因此函数返回值是一个字符串数组。

参数可以为字符数组,也可以为单个字符,但不能为字符串。

s2截取到了s1从第2位开始的连续2个字符,s3截取到s1从第3位直到最后的全部字符。(字符串起始位下标为0)

字符串查找

string s1 = "rbgjkrbgo";
int a = s1.IndexOf("rbg");
int b = s1.LastIndexOf("rbg");

IndexOf:在s1中查找“rbg”第一次出现时所处的位置,上述程序返回0。

LastIndexOf:在s1中查找"rbg"最后一次出现的位置,上述程序返回5。

若不存在所查字符串,返回-1。

还有两个函数:

s1.StartsWith(s2),如果是s1的开头是s2,返回true,否则false。

s1.EndsWith(s2),类似。

s1.Contains(s2),如果s1中有s2,返回true,否则false。

字符串替换

string s2 = s1.Replace("aa", "bb");

将s1中出现的所有"aa"替换为"bb",将新字符串赋给s2。

字符串修改

s1.Trim():返回去除s1开头空格和结尾空格的字符串,字符串中间的空格不删。

s1.TrimStart():只去掉开头空格。

s1.TrimEnd():只去掉结尾空格。

字符串判断

判断字符串是否为空:

string s1 = null;
bool f = string.IsNullOrEmpty(s1);

当s1为""或者null时,都返回True,但当s1为""时是占据内存空间的, null则不占。

判断两个字符串是否相等:s1.Equals(s2),相等返回True。

(Equals和==不一样。对于值类型两者相同,对于除字符串的引用类型两者不同。)

字符串特点

字符串是引用类型,其数据存储在堆空间,在栈空间中存储该数据引用地址。

每当给字符串赋以新值时,旧值并未销毁,而是开辟了一块空间存储新值。

 

13.StringBuilder类

与字符串类似,但比string效率高很多,而且节省空间。

定义与向里面追加数据:

StringBuilder sb = new StringBuilder();
sb.Append(12);
sb.Append(12.34);
sb.Append('a');
sb.Append("as");

sb.Append()可追加的数据类型极多,包括但不限于整数、小数、字符、字符串。

将sb中所有数据转换为字符串:

string s = sb.ToString();

输出s,会得到1212.34aas

清空sb中数据:sb.Clear()        无返回值

注意:要使用stringBuilder类,需要在开头调用System.Text,一般程序创建时已经写好了。

 

14.Stopwatch类

用于计算程序运行时间。若要使用,开头需要调用:

using System.Diagnostics;

创建:

Stopwatch sw = new Stopwatch();

在需要开始计时的程序代码处键入:sw.Start();

结束处键入:sw.Stop();

输出程序段运行时间:Console.WriteLine(sw.Elapsed);

输出的格式:

00.00.00.0000028   分别是时、分、秒及更小。

 

15.枚举类型

定义(一般写于namespace之下,方便所有的类都可用到)

元素名的规范与变量名相同(除此之外,元素名还能是中文,也就是说,元素名需以英文、中文或下划线开头),元素之间用逗号隔开,最后一个元素之后不用逗号。

调用:

Gender play1 = Gender.男;
Console.WriteLine(play1);

输出为:男

使用枚举类型是为了在同一项目中统一一些描述性词语的用法。例如在形容玩家性别时,直接调用Gender,则所用的描述性词语就只能是Gender之中的元素了。

 

16.结构体类型

一种值类型,定义于namespace之下(例子:创建一个结构体存储玩家信息):

public struct Player
{
    public string name;
    public int level;
    public Gender gender;
    public string career;
}

注意:都要有public修饰符。

调用与赋值:

Player player1 = new Player();
player1.name = "Zerg";
player1.level = 100;
player1.career = "mage";
player1.gender = Gender.male;

 

本文部分内容来自擅码网(http://www.mkcode.net)Unity 3D课程,经本人学习、整理得来,若有错漏,欢迎指正!

Course Technology PTR, 2010 Even experienced game developers sometimes have a hard time making their vision for a great game a reality. The number of available programming languages, libraries, and production methods can make the development process overwhelming and result in complicated, unreliable game code. C# Game Programming: For Serious Game Creation shows programmers how to write simple, clean, and reliable code step-by-step through the creation of a basic game. The game is built using C#, a high-level programming langua ge, and OpenGL, an industry favorite for graphics display. You'll get an overview of the methods and libraries used to build good games, learn how to use those libraries and create your own, and finally build your own scrolling shooter game. You'll even find tips and information on how to develop your own game ideas and you'll have an excellent code base to work with. C# Game Programming: For Serious Game Creation provides you with all the information you need to take your game ideas from concept to completion. Aboit author Daniel Schuller is a British-born computer game developer who has worked and lived in the United States, Singapore, Japan, and is currently working in the United Kingdom. He has released games on the PC as well as the Xbox 360 and PlayStation 3. Schuller has developed games for Sony, Ubisoft, Naughty Dog, RedBull, and Wizards of the Coast, and maintains a game development website at http://www.godpatterns.com. In addition to developing computer games, Schuller also studies Japanese and is interested in Artificial Intelligence, cognition, and the use of games in education. amazon link:http://www.amazon.com/exec/obidos/ASIN/1435455568/buythisbooks-20
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值