Unity3D

本文深入探讨Unity3D的开发细节,包括类的静态成员、对象的生命周期、构造函数的作用、泛型类、全局脚本实现方式以及单例模式。此外,还讲解了方法、变量、继承、属性、静态类的用法,以及在游戏开发中如何使用静态成员、静态类和单例模式进行交互。内容涵盖静态与非静态对象的区别、构造函数的调用时机、Awake()与Start()的生命周期区别,以及如何通过静态成员实现全局脚本。文章还涉及了组件交互、数据类型、方法重载、重写、泛型、委托事件、资源管理和性能优化等多个方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、 类的本质是类型,而不是数据,所以类不存在于内存中,不能被直接操作,类被实例化为对象时,从而对对象进行操作。但静态成员可以独立于对象被引用(含有静态成员的非静态类脚本不必绑定GameObject)。静态类不能被实例化,但可以直接视之为类型而引用其成员。静态类的脚本不能继承MonoBehaviour,不需要绑定GameObject。静态类可用作全局脚本,存储金钱、经验、物品等。

抽象类:只能被继承,不能实例化

变量 方法 属性 索引器 事件 

类的赋值实现了什么? class A=B

类的多态性 new基类隐藏 :衍生类的成员隐藏掉基类的同名成员

属性get set 用于间接读取private变量?字段

静态类的衍生类的base及this用法,静态成员中不能使用base与this

运算符重载 实现类的加减乘除等运算

假如KeyMouseInput、AndroidInput均继承自UserInput。可以用Get Component<UserInput>()来获取KeyMouseInput或者AndroidInput脚本?

 

 

2、静态

                                   静态对象                                                        非静态对象     

拥有属性:                是类共同拥有的                                             是类各对象独立拥有的

内存分配:               内存空间上是固定的                                      空间在各个附属类里面分配 

分配顺序:               先分配静态对象的空间                    继而再对非静态对象分配空间,也就是初始化顺序是先静态再非静态.

      

1)静态对象的数据在全局是唯一的,一改皆改。 而修改非静态对象,不会影响其他同类对象的数据。 

2)直接用 类名.静态方法名  或者  类名.静态变量名就可引用并且直接可以修改其属性值,不用get和set方法。

 

3、在方法内部声明变量时,不允许加修饰public /private。方法可直接引用其所属class声明的成员,而不必将成员名写进方法的参数列表。(变量名重名时:this.x指该方法所在类的成员变量,x指代方法内部声明或由方法参数列表引入的变量)(方法内部通过GetComponent<>(),取得的组件及其变量均为引用,方法内可直接修改获得的组件及变量)

 

4、构造函数

   a.构造函数的命名必须和类名完全相同

   b.构造函数的功能主要用于在类的对象创建时,为类的成员赋初值。它没有返回值,也不能用void来修饰。

   c.一般情况下,构造函数不被显式调用,而是在创建对象时自动被调用。但只要是父类有带参的构造函数,在子类中就必须显式的调用父类的构造函数,因为子类的构造器在实例化时无法找到父类的构造函数(当父类有自己写的无参构造函数时,子类也不用显式调用)。

5、泛型类

 

 

6、全局脚本可用静态脚本或单例脚本来实现,脚本类不继承MonoBehaviour更好。静态脚本如何同行为脚本交互?

5、继承MonoBehaviour的单例脚本Sgtn(需绑定GameObject,亦是全局脚本)及调用脚本CallSg。

 

Awake()与Start()的区别,生命周期?

Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次;如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数不会执行;如果游戏对象的初始状态为开启状态,那么Awake函数会执行;值得注意的一点是,Awake函数的执行与否与脚本实例的状态(启用或禁用)并没有关系,而是与脚本实例所绑定的游戏对象的开关状态有关。如果重新加载场景,那么场景内Awake函数的执行情况重新遵循上述两点。

 

Start()将在MonoBehavior创建后在该帧Update()第一次执行前被调用;Start()函数只在脚本实例被启用时才会执行;Start函数总是在Awake函数之后执行。如果游戏对象开启了,对象上绑定的脚本实例被禁用了,那么Start函数不会执行。这是Start函数的特点,只有在脚本实例被启用时它才会执行,并且Start函数只会在脚本实例首次被开启时才会执行。如果是已经开启过的脚本实例被关闭后再次开启,那么Start函数不会再次执行。

 

 

 

 

using UnityEngine;

using System.Collections;

public class Sgtn: MonoBehaviour

{

public static Sgtn _instance; //如果此处去掉static后果如何?

//其他声明……

void Awake()

{

_instance=this;

 

}

public void SgFunc()

{

Debug.Log("SgFunc from Sgtn, at your service!");

}

//其他方法……

}

 

CallSg脚本

using UnityEngine;

using System.Collections;

public cla

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值