-
目录
-
Unity知识点
1、项目常用文件夹命名
Scripts 脚本文件夹
Prefabs 预设文件夹
Materials 材质文件夹
Scenes 场景文件夹
Textures 贴图文件夹
Models 模型文件夹
Animations 动画文件夹
Audio/Musics 音乐(音效)文件夹
Resources 资源文件夹
SkyBox 天空盒
Editor 自定义文件夹
2、GameObject类
GameObject类继承于Object类,是Unity场景里面所有实体的基类
1)物体状态:
//Debug.Log(obj.activeSelf); //显示物体激活状态(只读)
//obj.SetActive(true);//设置物体的激活状态
SetActive显示/隐藏游戏对象:在Unity中,要激活游戏对象的方法就是使用SetActive(),就是说通过此方法让游 戏对象显示或者隐藏。
2)名字、标签、层:
//Debug.Log(obj.name); //输出物体名字
//Debug.Log(obj.tag);//输出标签
//Debug.Log(obj.layer);//输出层(删除数字)
3)查找方法:
通过对象名称(Find方法)GameObject.Find
通过标签获取单个游戏对象(FindWithTag方法)
通过标签获取多个游戏对象(FindGameObjectsWithTags方法)
物体:
CreatPrimitive方法是创建一个原生几何体,也就是带有基本网格渲染器和相应碰撞器的游戏对象。
例如:Cube、Sphere、Capsule等。
GameObject.CreatePrimitive(PrimitiveType.Cube);
Destory销毁:
Destory()是主要用于销毁游戏对象以及组件,但不会再引用那个被销毁的对象
Destroy(GameObject);
Destroy(GameObject, time);
Instantiate实例化:
Unity提供克隆游戏对象的方法
Instantiate(GameObject);
Instantiate(GameObject, position, rotation);
3、Collision事件
OnCollisionEnter函数:当碰撞体或者刚体与其他碰撞体或者刚体开始接触时调用
OnCollisionStay函数:当碰撞体或者刚体与其他碰撞体或者刚体保持接触时调用
OnCollisionExit函数:当碰撞体或者刚体与其他碰撞体或者刚体停止接触时调用
4、Trigger事件
OnTriggerEnter函数:当其他碰撞体进入触发器时调用
OnTriggerStay函数:当其他碰撞体停留触发器时调用
OnTriggerExit函数:当其他碰撞体离开触发器时调用
5、SceneManager类
-
C#知识点
一、数据类型
1、引用类型
1)定义
存储的是引用;存在堆中。
2)包括
< 1 >类
基类:object
字符串:string
自定义类:class
< 2 >接口:interface
< 3 >数组:int[ ];string[ ]
< 4 >dynamic(不常用)
例如://引用类型
Man m1 = new Man();
m1.name = "张三";
Man m2 = m1;
Console.WriteLine("m2.name=" + m2.name);
m2.name = 20;
Console.WriteLine("m2.name=" + m2.name);
3)特点
必须在托管堆中为引用类型变量分配内存。
必须使用 new 关键字来创建引用类型变量。
在托管堆中分配的每个对象都有与之相关联的附加成员,这些成员必须被初始化。
引用类型变量是由垃圾回收机制来管理的。
多个引用类型变量可以引用同一对象,这种情形下,对一个变量的操作会影响另一个变量所引用的同一对象
引用类型被赋值前的值都是 null。
2、值类型
1)定义
存储的是引用;存在堆中。
2)包括
int 整型
long 长整型
float 浮点型
char 字符型
bool 布尔
enum 枚举
struct 结构
例如://值类型
int a = 10;
int b = a;
Console.WriteLine("b=" + b);
a = 20;
Console.WriteLine("b=" + b);
3)特点
值类型特点:
值类型变量都存储在堆栈中。
访问值类型变量时,一般都是直接访问其实例。
每个值类型变量都有自己的数据副本,因此对一个值类型变量的操作不会影响其他变量。
复制值类型变量时,复制的是变量的值,而不是变量的地址。
值类型变量不能为 null,必须具有一个确定的值。
3、值类型与引用类型的区别
值类型与引用类型的区别:
从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元。栈在编译时就分配
好内存空间,在代码中有栈的明确定义;而堆是程序运行中动态分配的内存空间,可以根据程序的运行情况动态地分配内存的大小。因此,值类型总是在内存中占用一个预定义的字节数。而引用类型的变量则在栈中分配一个内存空间,这个内存空间包含的是对另一个内存位置的引用,这个位置是托管堆中的一个地址,即存放此变量实际值的地方
对于值类型的实例,如果作为方法中的局部变量,则被创建在线程栈上。如果该实例作为类型的成员,则作为类型成员的一部分,连同其他类型字段存放在托管堆上。引用类型的实例创建在托管堆上。
二、数组
1、定义
它是一个集合,存储的类型是相同的。实际上是一个简单的线性序列,因此访问起来很快。
注意:数组是引用类型
2、声明
new一个数组,才分配空间
例如:1)一维数组:
//声明一个长度为3的字符串数组
string[] arrA = new string[3];
//声明一个长度为5的整型数组
int [] arrB = new int [5];
//第一种赋值方法
int[] arrA1 = { 1, 2, 3 };
//第二种赋值方法
int[] arrA2 =new int [5]{ 1, 2, 3, 4, 5 };
//第三种赋值方法
int[] arrA3 = new int[] { 1, 2, 3, 4, 5};
//常用
int[] arrAx = new int[3];
arrAx[0] = 10;
arrAx[1] = 20;
arrAx[2] = 30;
foreach(int item in arrAx)//只能用来遍历数组中的数值,不能赋值
{
Console.WriteLine(item);
}
foreach (var item in arrAx)
{
Console.WriteLine(item);
}
for (int i=0;i<arrAx.Length;i++)
{
Console.WriteLine(arrAx[i]);
}
2)二维数组
//定义
int[,] arr1 = new int[5, 6];
//赋值
arr1[0, 0] = 0;
arr1[0, 1] = 1;
int i = 1;
for (int iX = 0; iX < 5; iX++)
{
for (int iY = 0; iY < 5; iY++)
{
arr1[iX, iY] = i++;
}
}
//遍历
for (int iX=0;iX<5;iX++)
{
for (int iY = 0; iY < 5; iY++)
{
Console.WriteLine("arr1[{0},{1}]={2}",iX,iY,arr1[iX, iY]);
}
}
3)多维数组
//三维数组定义(多维以此类推)
int[,,] arr2 = new int[1,5, 6];
三、自定义类型
1、枚举类型
1)定义
例如://枚举类型
int xinQi = 1;//主角状态
ZhuangTai zhuJue = ZhuangTai.正常;
Console.WriteLine("zhuJue="+ zhuJue);
ZhuangTai diRen = new ZhuangTai();//new相当于初始化
Console.WriteLine("diRen=" + diRen);
//new:1、实例化对象;2、值类型new相当于初始化对象
int[] a= new int[5];
a[0] = 10;
a[1] = 20;
a = new int[10];
Console.WriteLine("a[0]=" + a[0]);
2)用法
//枚举:可以放在类里,也可以放在类外,不能放在方法里(注意!)
public enum ZhuangTai
{
正常,攻击, 死亡
}
2、结构体类型
特点
< 1 >可以带有方法、字段、索引、属性、运算符方法和事件
< 2 >结构可以定义构造函数,不能定义析构函数
不能定义默认构造函数:默认构造函数是自动定义的且不能被改变
< 3 >不支持继承:
与类不同,结构不能继承其他结构或者类
结构不能作为其他结构或类的继承结构
< 4 >当使用new操作符创一个结构对像时,会调用适当的构造函数来创建结构,与类不同,结构可以不使用New操作符即可被实例化
< 5 >如果不使用New操作符,只有在所有的字段都被初始化之后,字段才被赋值,对象才被调用,使用的字段必须初始化
< 6 >用的时候不需要实例化
如:Books book;
book.money = 15.5f;
book.name = "张三";
例如://结构体:可以定义在类里,也可以定义在类外
public struct Man
{
public String name;
public int age;
}
//结构体类型
Man man;
man.name = "张三";
man.age = 10;
Console.WriteLine("名字:"+man.name );
Man man2 = new Man("李四",11) ;
Console.WriteLine("名字:" + man2.name);
3、注意
1)结构存的是值类型
2)类自定义类型存的是引用类型
4、构造函数和析构函数
1)构造函数特点
1.构造函数的命名必须和类名完全相同;
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态.它没有返回值,也不能用void来修饰.这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择.而其他方法都有返回值.即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的.
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用.
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,
5.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
2)析构函数特点
析构函数是在类名前加~,也没有返回值;
析构函数是在程序结束时执行。
例如:
class Woman()
{
public string name;
public int age;
public Woman()//构造函数:实例化对象,会调用
{
name = "zhangsan";
age = 10;
}
public Woman(string str,int i)
{
name = "zhangsan";
age = i;
}
~Woman()//析构函数,系统自动调用
{
}