Unity不挂载脚本至场景实现自动初始化

简介: 很多插件以及工具类,都会有一个初始化函数,需要在项目启动时手动调用,比较麻烦也提高了代码耦合性,Unity5.0以上的版本,针对这种情况,提供了新的特性**RuntimeInitializeOnLoadMethodAttribute**帮助自动初始化。

声明方式

特性共有六种参数声明方式,如下:

// 场景加载完毕调用 无参默认缺省值为AfterSceneLoad
[RuntimeInitializeOnLoadMethod]
// 场景加载完毕调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
// 场景加载前调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
// 所有程序集被加载和预加载资产被初始化后调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)]
// 启动画面显示之前调用
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
// 子系统注册回调
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]

示例

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
static void AfterSceneRuntimeOnLoadMethod()
{
    // 场景加载完毕后执行
    print("AfterSceneRuntimeOnLoadMethod");
}

[RuntimeInitializeOnLoadMethod]
static void RuntimeOnLoadMethod()
{
    // 场景加载完毕后执行(缺省值)
    print("RuntimeOnLoadMethod");
}

[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
static void BeforeSceneRuntimeOnLoadMethod()
{
    // 场景加载前执行
    print("BeforeSceneRuntimeOnLoadMethod");
} 

Tip

  • Unity5.0以上的版本才具有此特性
  • 声明的函数必须是静态的,加上static关键字,由此引申出的用法如下:

    • 项目入口函数使用该声明自动调用
    • 工具类中处理与类对象无关的初始化函数用此声明,与类对象相关的初始化逻辑写在构造函数中
  • 函数的执行顺序如下:

    • 全局:SubsystemRegistration >> AfterAssembliesLoaded >> BeforeSplashScreen >> BeforeSceneLoad >> Awake >> Enable >> AfterSceneLoad >> Start
    • 同类同声明:按照定义顺序执行
    • 不同类同声明:无法确定具体顺序
相关文章
|
2月前
|
图形学
Unity 不同Scene场景转换(简)
本文提供了Unity中实现场景转换的基本方法,包括编写传送脚本、创建传送门和玩家对象,并通过触发器实现玩家触碰传送门时切换到另一个场景的功能。
Unity 不同Scene场景转换(简)
|
2月前
|
图形学
小功能⭐️Unity获取场景中所有物体
小功能⭐️Unity获取场景中所有物体
小功能⭐️Unity获取场景中所有物体
|
1月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
72 3
|
2月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
40 0
|
4月前
|
人工智能 图形学
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
【unity小技巧】使用动画状态机脚本实现一个简单3d敌人AI功能
36 0
|
4月前
|
人工智能 定位技术 图形学
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
【Unity小技巧】一个脚本实现控制3D远程/近战敌人AI
41 0
|
4月前
|
自然语言处理 图形学
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
【unity实战】一个通用的FPS枪支不同武器射击控制脚本
48 0
|
4月前
|
定位技术 图形学 开发者
【Unity实战】切换场景加载进度和如何在后台异步加载具有庞大世界的游戏场景,实现无缝衔接(附项目源码)
【Unity实战】切换场景加载进度和如何在后台异步加载具有庞大世界的游戏场景,实现无缝衔接(附项目源码)
149 0
|
4月前
|
程序员 图形学 Android开发
Unity脚本生命周期
Unity脚本生命周期
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
82 6