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

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

是的,我也用的引擎的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