学习Unity &C#: day 6~7 2023/9/11~12

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()//析构函数,系统自动调用
        {

        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾筱黎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值