在C# 中 class 是创建类的标志,要创建类的话得现有class
上面这个的逻辑是 类的访问权限, 关键字,类名以及类继承的父类
在Unity中创建一个脚本或者添加一个组件,就相当于在Unity命名空间中创建了一个可以访问的类。这些类能够直接在其它类中被使用
在上面这张图中的两个类都是我们自己创建的脚本(脚本其实就是一个类,当我们将脚本挂载到游戏对象上时,就相当于实例化了一个脚本类的对象)
首先有一个大的Unity命名空间,Unity中本身就有的类(包括组件等等),我们创建的脚本都在这一个命名空间中,所以我们可以在一个类中实例化另一个类的对象(比如在一个脚本类中实例化另一个脚本类的对象),以及调用另一个类的类方法(静态方法)
每一个游戏对象其实就相当于一个实例化对象的集合,一开始的游戏对象是空的,里面什么实例化对象都没有,随着我们挂载组件,脚本(实例化组件,脚本对象),游戏对象中就开始被实例化对象填充
1.第一个方法---
Object.FindObjectsOfType<Enemy>()
object类是Unity中所有类的父类,所以我们能够直接在脚本类中调用object类中的方法
这个方法的返回类型是一个数组,数组中的元素的类型由我们填在尖框中的类型来确定,而尖框中的类型决定了我们要查找的对象的类型
查找的逻辑是遍历每一个游戏对象(对象集群)中具有的每一个对象,将与和尖框中类型相同的对象以引用的形式存到数组之中
min.GetComponent<MeshRenderer>().material.color = Color.blue;
第二个方法:
当我们找到了一个游戏对象(对象集群)中的任何一个对象的引用时,我们就可以通过这个引用找到该游戏对象(对象集群中的其它对象),使用的方法是GetComponent ,尖框中的类型决定了我们要查找的对象的类型
每一个脚本,组件类由于都继承了具有GetComponent方法的父类,所以它们都能够使用这个方法
这个方法的查找逻辑是 -- 在调用这个方法的对象所在的对象集群(游戏对象)中逐个查找,并将与要查找的对象类型相同的对象的引用返回(只返回一个对象)
静态变量与动态变量
静态变量是被 static 关键字修饰的变量
静态变量分为局部静态变量和全局静态变量
静态变量在程序加载时就会被分配内存空间,程序结束时才被销毁
局部变量(动态变量)则是在使用到它时才分配内存空间,使用完后立即被销毁,最典型的例子就是函数(方法中的变量)
静态方法(类方法)与非静态方法(实例方法)
静态方法是指被 static 关键字修饰的类中的方法
该方法属于类,能够直接通过类名调用,无需在实例化对象之后再通过对象调用(实例方法需要这么做)
静态方法和静态变量,属性都会在程序加载时被分配好内存空间,在程序结束时被销毁,而非静态方法和动态变量则只有在用到时才会被分配内存空间,且在用完后就会被销毁
如果引用创建后没有指向实例化的对象的话,则默认指向 null(空)
Transform类自带的非静态方法 Find --- 能够根据给定的子物体的名称来查找子物体(名称为参数)
但是这种查找是有限制的,它只能够在父物体的下一层子物体中查找,而不能够深入到子物体的子物体(第二层)中进行查找,第三层,第四层等等同理
Getchild方法可以根据索引来找到并返回父物体对应索引的子物体
父物体的子物体的索引排列方式是 --- 自上而下,从0开始递增排列(递增量为1)
如果想要在脚本中获取当前脚本实例对象所在的对象集群(游戏对象)中的某个组件实例化对象(即指向Unity自带的组件)的引用的话(以Transform组件为例),则可以通过下面这行代码实现:
this.transform(此时这个就是游戏对象(对象集群)中,Transform类的实例化对象(即挂载的Transform组件)的引用)
其它组件同理(注意只有Unity自带的组件才能这么找到)
c#如何输入输出文本
主要是 console.writeline 及一些其它方法
unity如何在控制台中输出文本
1.主要用的方法是 Debug.Log()
当两个方法在同一个类中时,如果两个方法都是静态方法(类方法),或者都是非静态方法的话,则在两个方法中能够互相调用对方
如果两个方法中有一个方法是静态方法,另一个是非静态方法的话,则非静态方法中能够调用静态方法,静态方法中不能够调用非静态方法。
C#中创建数组的方法 --- 元素类型[ ] 数组名 --- 此处创建的是一个数组的引用,我们还需要实例化数组之后令这个引用有所指。
实例化代码 --- new 元素类型[元素个数]