if变形:处理多种情况(可添加多个else if)
只会执行其中一种分支,若满足其中一个则后续不再做判断
格式:
if()
{
}
else if()
{
}
if变形:处理多种情况(可添加多个else if)
只会执行其中一种分支,若满足其中一个则后续不再做判断
格式:
if()
{
}
else if()
{
}
逻辑或运算符||:||左右两边吧任意一个为true则返回true
类名定义时可使用下划线 _
运算符:
数学运算符:
+ - * / %
赋值:
= += -= /= %=
a+=b ==> a=a+b
比较运算符:
> >= < <= == !=
// !=为不等于
逻辑运算符:
&& || !
//&&逻辑与 ||逻辑或 !取反
//&&左右两边都为true时才输出true
//针对bool类型运算
//!用于取反
用法:!true或!false
也可以把变量取反
在类中声明变量:
public int hp;
//可在hp后添加=数字,修改默认值,默认值初始为0
inspector上的值以第一次初始化的值为准
脚本中的初始值和inspector中的初始值冲突时以inspectior中的初始值为准
public与private,private在inspectior面板上不显示,public则显示且可在inspectior面板上更改参数
GameObject类型的变量可以赋值游戏物体
c#中称为字段
为声明为public或private时默认为private
public或private是访问修饰符
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//命名空间,灰色的为未使用,不同命名空间里有不同类,若要使用则要先引用该命名空间
public class player : MonoBehaviour
{
//palyer为类的名字,要和文件名保持一致
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
定义命名空间;
namespace xxx
{
}
要使用命名空间的类需要引用,格式为
using 命名空间名字
注释
注释不会运行
注释可以写在代码后面
{}前面不能有//、
//后面代表单行注释及只对//后起作用
*/来表示。(这里面随便些什么都可以,只要不超过这个范围即可)
单行注释可以放在程序的任意地方,只要不
类中可包含方法(类可以进行的功能)
利用类声明的变量称之为对象
Enemy enemy = new Enemy();
//new Enemy()构造对象
未构造的对象无法使用
public class LearnCsharpClass : MonoBehaviour
{
private void Start()
{
Enemy enemy1 = new Enemy();
}
}
class Enemy
{
string name;
string hp;
}
若要访问对象的属性则要将string name;改为public string name;
public字段踩可以通过对象访问
string默认数值为null
int默认值为0
修改sting name;
enmey1.name = "叔叔"
print(enemy1.name);
输出结果为叔叔
字符组拼:使用+“-”+拼接
字符串+“-”+字符串
eg;
print(enemy1.name+"-"+enemy2.name)
类class:
类与类之间可以继承
eg:
public class LearnCsharpClass:MonoBehaviour
{
}
表示LearnCsharpClass继承自MonoBehaviour
定义:
class Enemy //Enemy为类名字,自己定义
{
string name; //字段,末尾需要加分号
}
类的声明:
Enemy enemy;
类的创建:
Enemy enemy = new Enemy();
if语句:
if(逻辑表达式)
{
}
若()内条件满足则运行{}内代码
eg;
hp = 0;
if(hp<=0)
{
print(“you die”)
}
输出结果为you die
if else语句:
if()
{
}
else
{
}
若满足if()内的条件则执行if语句中{}的代码,若不满足条件则执行else{}中的代码
float xxx = 数字.数字f;
float类型赋值时需要在数后加f(小数默认类型为double,无法直接赋值给float类型,需要在末尾加f)
double类型浮点精度更高(小数点后位数更多)
方法中的返回值:
return
统一方法内不能定义相同名字的变量
在方法1内部声明的变量无法在直接在外部使用
eg:
void strat()
{
void add(int a, int b)
{
int res = a + b;
}
print(res);
}
无法这样使用,因为res为add内声明的变量无法在外部(start方法内)使用
使用返回值:
void strat()
{
int add(int a, int b)
//add前的int为返回值类型
{
int res = a + b;
return res;
}
print(res);
int res = add(10,20)
//需要定义一个参数来接收返回值,之所以可以用res作为参数是因为位于不同方法中
print(res);
}
输出结果为30
需要指定返回值类型
返回值可以为空(void)
一个方法只能有一个返回值
返回值类型要和return值要匹配
参数定义:
void createnemy(参数类型 名字,参数类型 名字)
{
print("xxxxxx"+名字)
}
调用:
createnemy(new 参数类型(数字,数字,数字));
作用:控制方法里的变化,例如设置敌人位置血量等
枚举类型用于定义与类型有关的东西
定义(在class外):
enum 枚举类型名字
{
取值,
取值,
取值,
}
使用枚举类型声明变量:
枚举类型名字 xxx = 枚举类型名字.要调用的取值
method 方法(定义):
返回值 方法名(参数)
{
方法体
}
eg:
void start()
{
}
void 空返回值
调用方法:
方法名();
数组名.length访问数组长度
int[] hps = new int {10,20,30}
for(int i = 0; i<=hps.length; i++)
{
print(hps[i]);
}
i<=hps.length中i是根据索引来判断的,会因此最大索引为n-1
for循环:循环执行某一段代码
for(定义表变量;循环终止条件; ;)
{
循环体
}
eg:
for(int i = 1; i<=10; i++)
{
}
{}内为循环体(需要循环执行的代码)
i控制循环体执行次数
该行循环意为i等于1时判断条件(i是否<=10)若满足则执行一次{}内代码,并且在i的数值上加上1(i++),再次判断i是否<=10,依次循环执行
print("xxxxx"+i);
可以输出索引
比较运算符:bool类型
格式;
bool xxx = 操作数1 运算符 操作符2
1>2返回ture
eg:
bool res = 2>1
print(res);输出输出结果为ture;反之则输出false
等于要用两个等号==
bool类型只有ture/false两种返回结果
加/减等运算符
int hp = 100;
hp = hp+10;也可以简写为hp+=10;
print(hp);输出结果为110
减法同理
自增运算符:++(自身增加1)
自减运算符:--(自身减1)
int hp = 100;
hp++;
print(hp);输出结果为101,减法同理
数组的值可以改变
eg:
int[] hps = {10,20,30};
hps[1] = 50
print(hps[1]);
则输出50
int[] hps = {};
空数组,输出会只输出数组类型
int[] hps ={10,20,30};
直接构造,数组值的个数为位数
int[] hps =new int[3] {10,20,30};
[]内的数字为长度,长度和数值必须前后对应
int[] hps = new int[10]
构造一个长度为10的数组,数值为默认值(0~9)
int[] hps未构造,无法使用
可以改为int[] hps = null;
print(hps);
输出null
数组:存储一堆相同类型的数据
声明方式:
类型[] 数组名 = {数组值};
保存了多少个数据,数组长度就为几
通过索引导来访问数据 :从0开始,因此最大索引数为n-1
用法:数组名[n]
eg:
int[] hps = {10,20,30};
print(hps[0]);
输出10