路径:居然不一样,抱着试一试的心态,把这个 unity 里的路径换成了这个,再打包,发现好了.........
unity支持的脚本语言有一个特征叫做继承,继承是面对对象编程的基础之一,当一个类继承自另一个类时,他会获得被继承类的特征,在继承的语境下,被继承类被称为父类或基类,而继承类被称为子类或派生类。继承结果是父类中存在的项,也就出现在子类中,因此方法和变量可以在子类中使用,就像在父类中一样,无需再次创建,因为已经存在于父类中。
目前为止我们使用的大多数类可能都是继承的,例如:
个人理解:通过继承实现的不同对象调用相同的方法,表现出不同的行为,称之为多态。
在继承层次结构中,任何子类都可以成为父类,这表示在需要基类的时候,可以用派生类来替代它,现在假设一个游戏使用继承层次结构,其中的Orc和Goblin派生自Enemy,而Enemy又派生自Humanoid,如果我们想要创建一个集合令其包含场景中的所有Enemy对象,不必创建两个集合各自包含两个派生类,可以创建一个集合让它包含所有Enemy对象,那么Orc和Goblin都是此集合的元素。多态也适用于函数参数等,例如:
这个函数包含Collider参数,但是游戏对象没有Collider组件,但是它们可能有Box Collider,Sphere Collider,Mesh Collider或类似组件,当我们调用这个函数时,我们不知道会使用什么类型的Collider,事实上每个对象的特定Collider都会传入函数,因为这些所有不同的Collider都是继承于Collider父类,因此他们都会发挥作用。
多态的另一种用法涉及构造函数和对象引用,我们可以声明基类类型的对象,然后调用一个派生类的构造函数,这是因为变量引用需要的是基类的类型,子类的构造函数会创建衍生类型的项,这个过程被称为向上转型,当对象向上转型时,他只能被视为其父类的一个对象,因此只能使用父类中可用的变量和方法,并且使用时会把他们视作位于父类对象中(虚拟函数是个例外,它将调用最新覆盖版本),为了再把这个子类视作子类,我们需要向下转型子类变量,使它恢复为子类型。
通过继承,父类的成员在子类中自动可用或继承到子类中,在子类中重新声明父类成员的过程就是成员隐藏。
隐藏成员使用关键字new的方式略有不同,为了隐藏基类的成员,应该在成员的类型前面使用new声明子类成员,一般来说以这种方式声明的成员使用不会有影响,但是当子类向上转型为父类并且成员被使用的时候,它将被看作来自父类的成员,尽管实例为子类。
覆盖是更改子类中的父类方法,覆盖之后我们在子类中调用方法时,将调用最新版本的方法。
使用继承层次结构时,我们经常想要于基类略微不同的函数版本,只需要在子类中重新创建方法就可以,这里需要用到两个关键字,virtual和override,他们位置位于方法的返回类型之前。
如果我们想要在子类中为方法添加功能同时又不失去基类中方法的原始功能,那么可以使用base关键字来同时调用方法的父版本。
//这是只有一个必需方法的基本接口。
//这是一个与泛型结合的接口,
//其中T是将由实现类提供的数据类型的占位符。
是允许跨多个类定义通用功能,因此可以根据类实现的接口安全的对类的用途作出假设,要实现接口,只需要在类具有的任何继承只会加一个逗号,后跟接口名,如果没有继承关系,则不需要逗号,如果接口有泛型类型,则名称应后跟尖括号。并在里面输入类型。
接口的优势就是可以同时实现多个接口,但是却不能同时继承多个基类,并且接口可以跨多个互不相关的类定义通用功能。
通过拓展方法,可以向类型添加功能而不必创建Drive Type或更改原视类型,它非常适用于需要向类添加功能,但是又不能编辑类的情况。
例如unity中提供的Transform类,我们不能访问源代码,假如我们想要使用函数轻松重置Transform的位置,旋转和缩放,那么这个函数最好放在Transform类中。但我们无法直接向这个类添加,并且把这个函数加入派生类也没有意义,所以我们为其创建扩展。
扩展方法必须放在非泛型静态类中,常见做法是专门创建一个类来包含它们。扩展方法的用法与实例方法类似,它们也声明为静态方法。要使函数成为扩展方法而非静态方法,需要在参数中使用this关键字。
//创建一个包含所有扩展方法的类
//是很常见的做法。此类必须是静态类。
//扩展方法即使像普通方法一样使用,也必须声明为静态。
//请注意,第一个参数具有“this”关键字,后跟一个 Transform加上变量。
//此变量表示扩展方法会成为那个类的一部分。
//虽然这里的声明有参数,但是调用函数时不需要参数
//创建好之后,我们就可以把它视为所扩展的类的成员。
//请注意,即使方法声明中有一个参数
//也不会将任何参数传递给此扩展方法。
//调用此方法的Transform 对象会自动作为第一个参数传入。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。