Unity 基础 - 脚本的生命周期

新建一个 C# 脚本,在 MonoDevelop 中打开脚本,我们会发现,只要在 Unity 中国年创建的脚本,默认都是集成自 MonoBehaviour的,像这种集成自MonoBehaviour的类或者脚本称之为运行时类,继承自MonoBehaviour的类都不能手动进行实例化,当然在脚本中也可以创建一个类不继承MonoBehaviour

脚本创建完成后,系统会默认创建两个方法,分别是Start ()Update (),但是这两个方法并不是 MonoBehaviour 中定义的方法,这两个方法是通过反射调用的一些事件,会在特定的时间调用,由系统决定,方法名一定不能写错,方法名写错,系统并不会报错。这些方法定义了一个脚本从被加载到被销毁的过程中脚本的生命周期,除了这两个方法,还有几个方法,分别是 Awake()OnEnable()LateUpdate()OnDisable()OnDestroy(),包括还有其他的方法,比如说OnGUI()FixedUpdate()。运行脚本可以查看输出,Awake()OnEnable()OnDisable()OnDestroy()只输出一次,Start ()LateUpdate()Update ()会循环打印。

using UnityEngine;
using System.Collections;

public class test : MonoBehaviour {

    // Use this for initialization
    //在第一次调用 Update 之前会调用一次
    //有时也会在 Start 方法中做一些初始化操作
    void Start () {
        //初始化 private 成员
        print ("Start");
    }

    // Update is called once per frame
    // 每帧调用一次,接近 60帧/s
    void Update () {
        print ("Update");
    }
    //每当脚本被加载时调用
    //习惯在  Awake 中做一些初始化操作
    void Awake() {
        //初始化 public 成员
        print ("Awake");
    } 
    //每次激活脚本时都会调用
    void OnEnable () {
        print ("OnEnable");
    }
    // 在 update 方法调用完之后调用,一般来处理画面的逻辑
    void LateUpdate () {
        print ("LateUpdate");
    }
    // 取消激活状态后调用
    void OnDisable () {
        print ("OnDisable");
    }
    // 脚本被销毁时调用一次
    // 比如游戏中的怪物死亡之后,会掉落一些装备,可以在 Destroy 里写相应的逻辑
    void OnDestroy (){
        print ("OnDestroy");
    }
    // 基本处于激活状态,持续调用的方法,一般用来做编辑器扩展或 Debug 时使用, IMGUI 代码也要写在 OnGUI 中
    void OnGUI () {
        print ("OnGUI");
    }
    // 以固定的频率调用,不会受到图像刷新速率的影响,一般把处理物理的代码放到 FixedUpdate 中
    void FixedUpdate() {
        print ("FixedUpdate");
    }
}

//可以创建一个不继承自MonoBehaviour的类
public class A {
    public void test() {
        //不能使用 new 手动创建一个MonoBehaviour对象
        //NewBehaviourScript *script =new NewBehaviourScript();
    }
}

脚本的生命周期

运行脚本

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏假装我会写代码

Laravel 多态关系的表单验证

1434
来自专栏阿杜的世界

Java Web技术经验总结(十六)

1236
来自专栏Fish

爬虫入门实战课

写在最前 通过爬虫,可以搜集互联网上很多信息,有助于科研(比如爬个会议的网站之类的),因此想以应用带动一下学习,因此就有了这个小练手。 爬虫代码的主要结构 一个...

2089
来自专栏腾讯移动品质中心TMQ的专栏

内存泄漏漫谈

对于C/C++来说,内存泄漏问题一直是个很让人头痛的问题,因为对于没有GC的语言,内存泄漏的概率要比有GC的语言大得多,同时,一旦发生问题,也严重的多,而且,内...

2797
来自专栏Java架构师进阶

Java 10 新特性全览

在 Java 9 之后,Java 将采用基于时间发布的策略,每 6 个月一个版本。目前,Java 10 的新特性都已经确定。

844
来自专栏超然的博客

BAT 前端开发面经 —— 吐血总结

最近暑期实习招聘已经开始,个人目前参加了阿里的内推及腾讯和百度的实习生招聘,在此总结一下 一是备忘、总结提升,二是希望给大家一些参考 其他面试及基础相关可以...

2412
来自专栏Create Sun

基础拾遗-----mongoDB操作

前言   nosq互联网中运用极广的技术,mongo应该算是必不可少的技术之一,虽说我在项目中redis用的较多,mongo在项目中算是用的比较少的技术,但是也...

35611
来自专栏互联网高可用架构

白话阿里巴巴Java开发手册(异常日志)

3872
来自专栏AI派

真是绝了!史上最详细的Jupyter Notebook入门教程

Jupyter Notebook 是一个在浏览器中使用的交互式的笔记本,可以实现将代码、文字完美结合起来,它的受众群体大多数是一些从事数据科学领域相关(机器学习...

9238
来自专栏程序员互动联盟

【答疑释惑】C语言里面栈和堆的区别

很多初学者朋友对C语言里面的堆和栈理解的不是太清楚,模模糊糊。他们到底有哪些区别呢?我认为主要从以下几根方面来了解他们的不同之处: 1,变量位置:栈和堆都是程...

38512

扫码关注云+社区

领取腾讯云代金券