游戏中如何设置单例模式

[复制链接]
742 |8
打工人小棋 发表于 2023-7-23 11:14:22 | 显示全部楼层 |阅读模式
生命周期里面没有Awake函数,如果设置单例模式,怎么确保生命周期在前面。

有什么好办法吗?


@Core.Class
export default class RoomManager extends Core.Script {
    public static Instance;

    /** 当脚本被实例后,会在第一帧更新前调用此函数 */
    protected onStart(): void {
        RoomManager.Instance = this;
    }

    /**
     * 周期函数 每帧执行
     * 此函数执行需要将this.useUpdate赋值为true
     * @param dt 当前帧与上一帧的延迟 / 秒
     */
    protected onUpdate(dt: number): void {
    }

    /** 脚本被销毁时最后一帧执行完调用此函数 */
    protected onDestroy(): void {

    }
}



回复

使用道具 举报

kk 发表于 2023-7-23 11:17:53 | 显示全部楼层
private static _instance: xxxx;
    public static get Instance(): xxxx{
        return this._instance;
    }
    protected onStart(): void {
        xxxx._instance = this;
    }
回复

使用道具 举报

kk 发表于 2023-7-23 11:43:01 | 显示全部楼层
Awake这个函数也是有的吧
回复

使用道具 举报

猪头BOOM 发表于 2023-7-23 12:44:21 | 显示全部楼层
回复

使用道具 举报

打工人小棋楼主 发表于 2023-7-23 15:59:01 | 显示全部楼层
猪头BOOM 发表于 2023-7-23 12:44
https://forum.ark.online/forum.php?mod=viewthread&tid=1822   可以看看这个

UIBehavior这个默认的物体似乎是不继承的吧?
回复

使用道具 举报

打工人小棋楼主 发表于 2023-7-23 15:59:40 | 显示全部楼层
kk 发表于 2023-7-23 11:17
private static _instance: xxxx;
    public static get Instance(): xxxx{
        return this._instanc ...

谢谢,这样就是没办法解决某些在start就需要用到这个单例的情况。因为使用的start执行的顺序可能在单例之前
回复

使用道具 举报

打工人小棋楼主 发表于 2023-7-23 16:00:20 | 显示全部楼层
kk 发表于 2023-7-23 11:43
Awake这个函数也是有的吧

试了下好像没有
回复

使用道具 举报

喵喵哭唧唧 发表于 2023-7-23 18:07:14 | 显示全部楼层
可以尝试写一个方法不继承自Core.Script,在一个入口类里边,挨个初始化这些需要单例管理的类,这样这些单例类的位置很靠前,从而保证之后业务逻辑调用的地方他们是一定有的

可以参考一下这篇文章,如果还有不清楚的大家可以继续一起探讨哈
https://forum.ark.online/forum.php?mod=viewthread&tid=1437
回复

使用道具 举报

打工人小棋楼主 发表于 2023-7-24 13:17:07 | 显示全部楼层
喵喵哭唧唧 发表于 2023-7-23 18:07
可以尝试写一个方法不继承自Core.Script,在一个入口类里边,挨个初始化这些需要单例管理的类,这样这些单 ...

谢谢,写的很详细!
回复

使用道具 举报

72小时热榜
热门版块
快速回复 返回顶部 返回列表