我现在在制作缓存脚本,这个脚本会在几个场景中都通用,所以我想让它在游戏启动的时候自动挂载,并且自动执行初始化函数,各位大佬有方案吗?
你直接挂在场景的节点上不就行了?
在director监听事件回调里处理逻辑 如果需要在多个场景中通用 就搞个常驻节点
你在类外面直接new一个class执行就行
能详细说说吗 常驻节点是?我是最近才学习cocos
主要是这个脚本是在多场景中使用的 挂载在节点上的话 切换场景不就是没用了?
类外我要怎么new呢? 目前还是有点不太理解机制 才学习没多久
你是初始化界面数据还是游戏数据,游戏数据的话,写个单例就行了
主要是游戏数据,单例模式的话我看了也加了,感觉还有点没看懂逻辑,所以来论坛问问
请我喝奶茶,我给你教得会会的
只要能搞明白 一杯奶茶妥妥的
游戏数据就没必要挂在脚本,单例模式在合适的时机调用对应的方法就行,多个场景切换,在切换时掉用对应的方法处理数据就行。(可以先看下单例的列子,很好理解)
有详细的模板或例子吗 我研究下?
谢谢
// 导入引擎模块和环境判断变量
import { Director, director } from "cc";
import { EDITOR, EDITOR_NOT_IN_PREVIEW } from "cc/env";
// 导入各个功能模块(模块命名经过混淆处理)
import { _oiduA } from "./Audio"; // 音频管理模块
import { _N01L } from "./L10N"; // 多语言模块(L10N = Localization)
import { _KDS } from "./SDK"; // 第三方SDK管理模块
import { _emiT } from "./Time"; // 时间管理模块
/**
* 示例核心管理类(单例模式)
* 用于集中管理各个功能模块的实例,并提供全局访问点
*/
class Example {
// 单例实例引用
private static _instance: Example;
/**
* 获取单例实例
* @returns 全局唯一的Example实例
*/
public static get instance(): Example {
if (!this._instance) {
this._instance = new Example();
}
return this._instance;
}
// 公有属性:各个功能模块的实例引用
public audio: _oiduA = undefined!; // 音频模块实例(延迟初始化)
public l10n: _N01L = _N01L.instance; // 多语言模块实例(立即初始化)
public sdk: _KDS = undefined!; // SDK模块实例(延迟初始化)
public time: _emiT = _emiT.instance; // 时间模块实例(立即初始化)
/**
* 私有构造函数(单例模式)
* 注意:在编辑器环境且非预览模式时不会初始化功能模块
*/
private constructor() {
// 编辑器环境判断:在编辑器且非预览模式时直接返回
if (EDITOR && EDITOR_NOT_IN_PREVIEW) {
return;
}
// 监听场景加载完成事件(确保场景就绪后初始化需要场景上下文的模块)
director.on(Director.EVENT_AFTER_SCENE_LAUNCH, () => {
// 延迟初始化音频模块
if (this.audio === undefined) {
this.audio = _oiduA.instance;
}
// 延迟初始化SDK模块
if (this.sdk === undefined) {
this.sdk = _KDS.instance;
}
}, this);
}
}
/**
* 全局类型声明扩展
* 将模块实例挂载到全局命名空间,方便全局访问
*/
declare global {
namespace globalThis {
namespace example {
const audio: _oiduA; // 全局音频模块访问点
const l10n: _N01L; // 全局多语言模块访问点
const sdk: _KDS; // 全局SDK模块访问点
const time: _emiT; // 全局时间模块访问点
}
}
}
// 将单例实例挂载到全局对象
globalThis.example = Example.instance;
// 空导出(此文件作为模块执行,确保单例初始化)
export { }
1赞
实例数据类,直接单例模式。
静态数据类,直接导出引用。
感谢 我研究一下
好的 谢谢 我研究研究
好的明白了 我再研究研究
老哥 你这里挂载到全局对象 我有些不理解 你能详细说说吗?
我搞了一下,整篇代码不是自动运行并初始化的,不知道是不是这里的问题 我要怎么挂载呢,如果我要那种游戏一启动,无论在那个场景中,就自动运行的该怎么搞呢