C# 基础
教程:siki学院 Unity中的C#编程 - 零基础 39课时
时间:4.24 - 4.30
C#零基础笔记
1. 日志输出
print(1) // 继承自MonoBehaviour可以用print输出 Debug.Log(1) //不管继承,全部都可用这个输出 Debug.LogWarning //警告输出 Debug.LogError("error") //错误输出
2. 注释快捷键 ctrl+k ctrl+c
3. 声明变量
不能以数字开头,可以包含字母、数字、下划线
int hp = 100
或者
int hp; ->变量声明
hp = 100; ->变量初始化
4. 数据类型 - 不同的整数类型所占内存不一样
② . 浮点类型
float类型用于较小的浮点数,因为它的精度要求较低
double类型比float类型大,进度大一倍(15位)
float hp = 3.4f (3.4默认是double类型,3.4f 表示是一个float类型的3.4)
③. bool类型
bool isDie = false/true 表示状态的是或否
④. 字符/字符串类型
char c = 'a'
string name = "silvia"
⑤. 枚举类型
声明职业类型:
enum RoleType{
Mag,
Soldier,
Wizard
}
使用:
RoleType rt = RoleType.Mag
rt = RoleType.Soldier
5. 算术操作符 + - * / %
float res = 3+3.4f int和float类型进行加法运算,返回的结果是数据类型大的float类型,如果res定义为int会报错
string str1 = "my name is" ;
string str2 = "silvia"
string res2 = str1 + str2
6. if语句
if(hp<=0){ print("播放死亡动画") } else{ print("播放行走动画") }
7. 数组声明和使用
方式一: int[ ] hps = {100,80,90,30} 声明一个整型数组
方式二: int[ ] hps2 = new int[10] 声明一个全为默认值0的数组
int[ ] hps; //这样hps数组不存在,没有构造,不能被使用,会报错
int[ ] hps2 = { };这样hps2存在,可以被输出,但是数组长度为0
方式三: int[ ] hps = new int[5]{100,80,90,30,20} 既指定了数组的长度,又指定了数据的值
8. Vector3 unity数据类型
new Vector3(1,1,1)
9. 类的创建、声明、构造
主类,与文件名一致的类 public class learnCsharp : MonoBehaviour{ void Start(){ int hp = 100; Enemy enemy1 = new Enemy(); //类的对象的声明和构造 print(enemy1.name) //要调用对象里的属性,属性要设置为public print(enemy1.hp) enemy1.name = 'tony' //修改属性赋值 Enemy enemy2 = new Enemy(); //创建第二个对象 enemy1.Move(); enemy2.Move(); } } // 类的定义: class Enemy{ public string name; public int hp; public void Move(){ Debug.Log(name+"正在移动"); } public void Attack(){ Debug.Log(name+"正在攻击"); } }
10. Input.GetAxis("Horizontal") 获得用户水平方向
11.创建脚本和附加脚本
① 创建脚本 拖到物体上
② Add component
12. 当脚本中的值和inspect面板上的值不一致,输出inspect面板上的值
定义的private的变量不会出现在inspect上
没有给定public 和 private 默认是private
13. if 变形 和 枚举类型 switch-case 的使用
int heroType = 0 // 1soldier 2master 3assassin 4tank 5shooter if(heroType ==1){ }else if(heroType ==2){ }else if(heroType ==3){ }else if(heroType ==4){ }else{ }
enum HeroType{ soldier, Master, Tank, Assassin, Shooter } HeroType heroType = HeroType.soldier
if(heroType == HeroType.soldier){
}else if(heroType == HeroType.Master){
}else if(heroType == HeroType.Tank){
}else if(heroType == HeroType.Shooter){
}else{
}
switch case判断:
switch(heroType){ case HeroType.Soldier: print("战士发动技能"); break; case HeroType.Master: print("法师发动技能"); break; case HeroType.Assassin: print("刺客发动技能"); break; case HeroType.Tank: print("坦克发动技能"); break; default: print("default"); break; }
14.for、while、dowhile循环
15. foreach遍历
foreach(Transform t in children){ //t表示其中的每一个元素 if(t!=transform) //transform是当前游戏物体 Destory(t.gameObject); }
16.组件的获取
void Start(){ Transform t = GetComponent<Transform>(); //获得自身的transform组件 Collider[] colliders = GetComponent<Collider>(); //获得所有的封装器组件 GetComponent<BoxCollider>() ;//只获得盒子封装器 getComponentsInChildren<Transform>() //获得Transform子组件 //也可以获得别的物体的组件 public GameObject player; print(player.GetComponent<Rigidbody>()); //获得player的rigidbody刚体组件
组件禁用:
BoxCollider collider = GetComponent<BoxCollider>()
collider.enable = false //组件禁用
17. 获取游戏物体的4种方式
// 方法1 通过拖拽 public GamObject cameraMain; //如果是游戏物体 则必须拖拽游戏物体 public Camera maincamera; //如果是组件 则必须是同一类型的组件 // 方法2 transform.Find("查找路径") void Start(){ transform.Find("GameObject(1)/GameObject"); transform.Find("GameObject(2)") } // 方法3 GameObject.Find("游戏物体名") GameObject.Find("Main Camera") //返回第一个查找这个名字的游戏物体 //这个方法不推荐使用,因为是根据名字查找,比较耗费性能,在全局里遍历遍历游戏物体的名字; // 方法4 使用Tag标签查找 推荐方式 速度快 只会去找指定的标签 GameObject.FindWithTag("Player");