草庐IT

十天学习Unity3D脚本(一)九个回调

哈哈哈啦啦啦123 2023-06-07 原文

目录

一、游戏开始时调用一次的

1 Awake

2 OnEnable

3. Start

-----Awake、OnEnable、Start运行顺序

二、持续执行的函数

1. FixedUpdate

2. Update

---实现小功能

3. LateUpdate

4. OnGUI

三、收尾

1. OnDisable

2. OnDestroy

生命周期函数介绍


一、游戏开始时调用一次的

1 Awake

描述:哟咻开始时第一个调用的回调函数,调用一次

特点:当脚本组件处于不可用时,依然执行

    /// <summary>
    /// 在游戏开始时执行一次
    /// </summary>
    private void Awake()
    {
        //若没有继承MonoBehaviour,打印信息可以debug.Log();
        Debug.Log("Awake运行了");
        Debug.LogWarning("警告");
        Debug.LogError("出错了");
        //继承了MonoBehaviour,可以print打印
        print("打印");
    }

 打印情况如下:

2 OnEnable

描述:在脚本组件设置为可用时调用一次

作用:需要当一个对象被激活(inspector打勾)时进行一些逻辑处理,可以写在本函数中 

3. Start

特点:运行受到脚本组件是否勾选影响。

描述:在OnEnable之后调用,但在整个游戏过程中,只会执行一次;

           它是在对象进行帧更新之前才会被执行

Awake、Start均在游戏开始时运行一次

-----Awake、OnEnable、Start运行顺序

多个脚本时的执行顺序,可以设置

                Edit —> Project Settings —>Script Exception Order

 

二、持续执行的函数

1. FixedUpdate

描述:每个一定的时间间隔执行一次(可以设置),默认是0.02秒

用于进行物理相关的更新,如碰撞检测

设置间隔方法:

                Edit---Project Settings----Time---Fixed Timestep

2. Update

描述:每帧直行一次

作用:用于处理游戏核心逻辑更新

问题:Update和FixedUpdate哪个执行的次数多

---实现小功能

方块向x轴正方向移动,每帧移动0.02米

    void Update()
    {
        //Debug.Log("Update运行了");
        transform.position += new Vector3(0.01f, 0, 0);
    }

3. LateUpdate

作用:摄像机位置更新相关内容

    /// <summary>
    /// 每帧执行一次(适用于一个物体执行后跟随)
    /// </summary>
    private void LateUpdate()
    {
        Debug.Log("LateUpdate");
    }

4. OnGUI

作用:用于渲染旧版UI,每帧大约执行两次

三、收尾

1. OnDisable

描述:依附的GameObject对象每次失活时被调用(对象被销毁时也会被调用)

作用:需要当一个对象失活时 进行一些逻辑处理,就可以写在本函数中

2. OnDestroy

作用:对象被销毁时被调用(依附的GameObject对象被删除时),当删除的时候调用,销毁前也会执行一次OnDisable

生命周期函数介绍

我们需要利用Unity的生命周期的规则来执行游戏逻辑


所有继承MonoBehavior的脚本 最终都会挂载到GameObject游戏对象上
生命周期函数就是该脚本对象依附的GameObject对象从出生到消亡整个生命周期中
会通过反射自动调用的一些特殊函数

有关十天学习Unity3D脚本(一)九个回调的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  4. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  5. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  6. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  7. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  8. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  9. Unity 3D 制作开关门动画,旋转门制作,推拉门制作,门把手动画制作 - 2

    Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u

  10. [Vuforia]二.3D物体识别 - 2

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶

随机推荐