unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录

[1 初始的C# 脚本](# 脚本)

[1.1 初始的C# 脚本](# 脚本)

[1.2 创建时2个默认的方法](#1.2 创建时2个默认的方法)

[2 常用的几个生命周期方法](#2 常用的几个生命周期方法)

[2.1 脚本的生命周期](#2.1 脚本的生命周期)

[2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的](#2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的)

2.2 c#的基本语法别搞混

[2.2.1 基本的语法](#2.2.1 基本的语法)

[2.2.2 内置的方法名,要求更严格](#2.2.2 内置的方法名,要求更严格)

[2.3 gameobject 挂上脚本](#2.3 gameobject 挂上脚本)

[2.4 测试 Awake 和 OnEnable 和 Start方法](#2.4 测试 Awake 和 OnEnable 和 Start方法)

[2.4 测试这几个全部方法](#2.4 测试这几个全部方法)

[3 unity 使用这些脚本的逻辑](#3 unity 使用这些脚本的逻辑)

[4 project setting / scripts order修改执行次序](#4 project setting / scripts order修改执行次序)


1 初始的C# 脚本

1.1 初始的C# 脚本

下面这个C# 脚本是我刚刚unity里创建的test1.cs

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class test1 : MonoBehaviour

{

// Start is called before the first frame update

void Start()

{

}

// Update is called once per frame

void Update()

{

}

}

1.2 创建时2个默认的方法

  • 应该是因为最常用吧
  • void Start() {} 方法, 开始时执行,
  • void update() {} 方法,每帧执行1次

2 常用的几个生命周期方法

2.1 脚本的生命周期

  • Awake: 最早调用,只会执行1次
  • OnEnable:组件激活后使用,在awake后会执行1次,而且可能会反复执行多次
  • Start:在onEnable, 且一定在update 前执行1次
  • Update:每帧执行1次,理论上帧数越快执行的越快
  • LateUpdate:update后紧接着执行1次
  • FixedUpdate: 只和时间相关,固定间隔时间执行1次,与机器性能无关
  • OnDisable:组件不被激活时使用1次,而且可能会反复执行多次
  • Destory:组件被从gameobject上拿掉,销毁,之后调用1次

2.1.1 其中FixedUpdate 方法 的时间间隔,是在这设置的

2.2 c#的基本语法别搞混

2.2.1 基本的语法

  • 每句话后面要加;
  • 严格的大小写,Awake 不能写成 awake,否则不生效
  • 比如debug.log("") 是错误的,应该是Debug.Log("")

2.2.2 内置的方法名,要求更严格

  • 因为这是系统的内置方法,方法名是内置好的,必须按系统的大小写。C#严格些

2.3 gameobject 挂上脚本

  • 在project里创建1个脚本
  • 然后挂到一个gameobject上才行

2.4 测试 Awake 和 OnEnable 和 Start方法

  • 勾选掉 会导致 OnEnable被反复执行
cs 复制代码
using System.Collections;

using System.Collections.Generic;

using UnityEngine;



public class test1 : MonoBehaviour

{

    void Awake()

    {

    Debug.Log("awake");

    }

    void OnEnable()

    {

    Debug.Log("onEnable");  

    }

    void Start()

    {

    Debug.Log("Start");  

    }

}

2.4 测试这几个全部方法

  • 下面是全部的脚本
cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test1 : MonoBehaviour
{
    void Awake()
    {
    Debug.Log("awake");
    }
    void OnEnable()
    {
    Debug.Log("onEnable");  
    }
    // Start is called before the first frame update
    void Start()
    {
    Debug.Log("Start");  
    }

    // Update is called once per frame
    void Update()
    {
    Debug.Log("Update");   
    }
    void LateUpdate()
    {
    Debug.Log("LateUpdate");     
    }


    void FixedUpdate()
    {
    Debug.Log("FixedUpdate");     
    }

    void OnDisable()
    {
    Debug.Log("OnDisable"); 
    }

    void Destory()
    {
    Debug.Log("Destory");  
    }


}

反复勾选,脚本前面的勾,可以反复触发 OnEnabel 和 OnDisable

3 unity 使用这些脚本的逻辑

  • step1: (按优先级 )先执行所有脚本的的awake 方法
  • step1: (按优先级 )先执行所有脚本的的start方法
  • 。。。

4 project setting / scripts order修改执行次序

  • project setting / scripts order修改执行次序
  • 如果有多个脚本
  • 需要调整其执行次序
  • 这里点add,
  • 然后可以拖动其次序,或者修改值
  • 值越小越靠前
相关推荐
CSharp精选营2 小时前
我用 ASP.NET Core 做了个水稻病虫害检查系统
c#·毕业设计·.net core·码农刚子
唐青枫2 小时前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
下页、再停留2 小时前
【C#桌面客户端系列学习-2】在原来窗口基础上打开新窗口
c#·visual studio
Behavior2 小时前
Unity 手游 iOS Deep Link 唤醒全流程:从 URL Scheme / Universal Links 到 C# 层参数投递
c#·unity3d·游戏开发
我是唐青枫2 小时前
我用 C# 开发了一款电子发票自动整理工具
c#·.net
字节暗面2 小时前
Unity AssetBundle 热更新资源保护排查笔记
unity·游戏加固·资源加密
WAKU2 小时前
C#: 爸爸再爱我一回! 写在微软使用Rust重写GitHub Copilot之后的碎碎念
microsoft·rust·微软·c#·编程语言
唐青枫2 小时前
别把 WPF 写成一个 MainWindow:C#.NET Prism 模块化开发详解
c#·.net
用户788477316342 小时前
WPF 数据绑定 5 个隐形坑:第 3 个 90% 的人都栽过
c#