自定义System, init没被调用, update正常

自定义System, init没调用, update正常, 看了引擎代码,Director初始化时,项目代码还没执行,还没有注册进Director,后面通过registerSystem注册进去的, 只有update是正常调用的。

自定义的System

已经初始化完了才被注册进去
image

是的,我也用的引擎的system,也发现了这个情况。这是我封装的system:

import { GlobalInstanceFinder } from './GlobalInstanceFinder';
import { ReactiveProperty } from './ReactiveProperty';
import { LogWithTag, LogWithTagInnerData } from './LogWithTag';
import { Color, Eventify } from 'cc';
import { _decorator, System } from 'cc';
import { LifeCycleReactive } from './LifeCycleReactive';
import { applyMixins } from '../../utils/applyMixins';
import { Subscription } from '../internal/Subscription';
const { ccclass, property } = _decorator;

@ccclass('BaseManager')
export class BaseManager extends Eventify(System) implements LifeCycleReactive, LogWithTag, GlobalInstanceFinder {

    static registerSystem() { }

    timestamp: number = 0;

    willBind() { }
    onInitManager() { }
    onDestroyManager() { }

    constructor() {
        super();
        this.timestamp = Date.now();
    }

    init() {
        this.systemRegister(this.id);
        this.logInit();
        this.willBind();
        this.bind();
        this.onInitManager();
    }

    destroy() {
        this.onDestroyManager();
        this.unbind();
    }

    // Implement delegates

    // LifeCycleReactive
    binded = ReactiveProperty.Create(false);
    bind() { }
    unbind() { }
    manualBind(list: (Subscription | (() => Subscription))[]): void { }
    _mainSubscription?: Subscription;
    getMainSubscription(): Subscription { return this._mainSubscription; }
    _extraManagedSubscriptions?: Record<string, Subscription> = {};
    getExtraManagedSubscriptions(): Record<string, Subscription> { return null; }
    resetSubscriptions(key: string, genSubscription: () => Subscription): void { };

    // LogWithTag delegate
    _lwt = {} as LogWithTagInnerData;
    get logEnable(): boolean { return }
    get logColorOverride(): Color { return }
    logInit() { }
    debug(...param: any[]) { }
    log(...param: any[]) { }
    warn(...param: any[]) { }
    error(...param: any[]) { }

    // GlobalInstanceFinder delegate
    componentRegister() { }
    systemRegister(...param: any[]) { }
}

applyMixins(BaseManager, [LifeCycleReactive, LogWithTag, GlobalInstanceFinder]);

自己开头调用一下得了。

@ccclass('AgoraManager')
class AgoraManager extends BaseManager {

    public static instance: AgoraManager;
    static ID = 'agora_manager';
    get logColorOverride() { return color().fromHEX('#EEDDCC') };

    static registerSystem() {
        director.unregisterSystem(director.getSystem(AgoraManager.ID));
        director.registerSystem(AgoraManager.ID, agoram, System.Priority.MEDIUM);
        agoram.init();
    }

    static unregisterSystem() {
        agoram.destroy();
        director.unregisterSystem(director.getSystem(AgoraManager.ID));
    }
...

引擎的 System 只有在引擎启动的时候才会执行一次 init