基类 / ModuleC
ModuleC<T, S> Class  
客户端模块的基类
所有的客户端模块都必须继承这个类,才能被 ModuleService 管理。
注意:继承自 ModuleC 类中的方法名。当方法名前缀为"net_XXX"的方法才能在继承 ModuleS 中调用。
在 Script 类中说过,继承自 Script 的类享受onStart、OnUpdate、OnDestroy脚本的生命周期,在此基础之上,当在onStart()函数中注册了客户端服务端以及数据模块之后
ModuleService.registerModule(YourModS, YourModC, YourData);
使用示例:创建一个名为ModuleCExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,客户端日志会输出player模块每个生命周期执行的日志,按下F键你将在客户端以及服务端日志中看到玩家等级的信息ts
@Component
export default class ModuleCExample extends Script {
    protected onStart(): void {
        ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
    }
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
    protected onAwake(): void {
        console.log("-----------player模块创建模块-----------");
    }
    protected onStart(): void {
        console.log("-----------player模块开始-----------");
        //输出当前玩家的等级
        let playerData = this.data;
        console.log("玩家等级:", playerData.getlevel());
        playerData.onDataChange.add(() => {
            //玩家数据发生变化时,输出当前玩家的等级
            console.log("玩家等级:", playerData.getlevel());
        })
        InputUtil.onKeyDown(Keys.F, () => {
            this.server.net_LevelUp();
        })
    }
    protected onEnterScene(sceneType: number): void {
        console.log("-----------player模块进入场景-----------");
    }
    protected onUpdate(dt: number): void {
        //每帧调用 dt为两帧之间的时间差
        // console.log("-----------player模块更新-----------"+dt);
    }
    protected onDestroy(): void {
        console.log("-----------player模块销毁-----------");
    }
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
    //玩家升级
    public net_LevelUp(): void {
        //调用该函数的客户端玩家
        let player = this.currentPlayer;
        //调用该函数的客户端玩家id
        let playerId = this.currentPlayerId;
        //调用该函数的客户端玩家数据
        let playerData = this.currentData;
        playerData.levelUp();
        console.log("玩家等级:", playerData.getlevel());
    }
}
class PlayerModuleData extends Subdata {
    @Decorator.persistence()
    private level: number;
    protected initDefaultData(): void {
        this.level = 0;
    }
    public getlevel(): number {
        return this.level;
    }
    public levelUp(): void {
        this.level++;
        //保存数据
        this.save(true);
    }
}@Component
export default class ModuleCExample extends Script {
    protected onStart(): void {
        ModuleService.registerModule(PlayerModuleS, PlayerModuleC, PlayerModuleData);
    }
}
class PlayerModuleC extends ModuleC<PlayerModuleS, PlayerModuleData>{
    protected onAwake(): void {
        console.log("-----------player模块创建模块-----------");
    }
    protected onStart(): void {
        console.log("-----------player模块开始-----------");
        //输出当前玩家的等级
        let playerData = this.data;
        console.log("玩家等级:", playerData.getlevel());
        playerData.onDataChange.add(() => {
            //玩家数据发生变化时,输出当前玩家的等级
            console.log("玩家等级:", playerData.getlevel());
        })
        InputUtil.onKeyDown(Keys.F, () => {
            this.server.net_LevelUp();
        })
    }
    protected onEnterScene(sceneType: number): void {
        console.log("-----------player模块进入场景-----------");
    }
    protected onUpdate(dt: number): void {
        //每帧调用 dt为两帧之间的时间差
        // console.log("-----------player模块更新-----------"+dt);
    }
    protected onDestroy(): void {
        console.log("-----------player模块销毁-----------");
    }
}
class PlayerModuleS extends ModuleS<PlayerModuleC, PlayerModuleData>{
    //玩家升级
    public net_LevelUp(): void {
        //调用该函数的客户端玩家
        let player = this.currentPlayer;
        //调用该函数的客户端玩家id
        let playerId = this.currentPlayerId;
        //调用该函数的客户端玩家数据
        let playerData = this.currentData;
        playerData.levelUp();
        console.log("玩家等级:", playerData.getlevel());
    }
}
class PlayerModuleData extends Subdata {
    @Decorator.persistence()
    private level: number;
    protected initDefaultData(): void {
        this.level = 0;
    }
    public getlevel(): number {
        return this.level;
    }
    public levelUp(): void {
        this.level++;
        //保存数据
        this.save(true);
    }
}Type parameters 
T | T | 
|---|---|
S | extends Subdata | 
Hierarchy 
ModuleC
Table of contents 
Accessors  
data(): S | 
|---|
| 本地玩家的模块数据 | 
localPlayer(): Player client | 
| 获取当前玩家 | 
localPlayerId(): number client | 
| 获取当前玩家ID | 
server(): T client | 
| 和自己绑定的服务端模块,可通过此对象直接调用net_开头的服务端方法 | 
Methods  
onAwake(): void client | 
|---|
| 生命周期方法-创建模块时调用 | 
onDestroy(): void client | 
| 生命周期方法-销毁模块调用 | 
onEnterScene(sceneType: number): void client | 
| 生命周期方法-进入场景调用 | 
onExecute(type: number, ...params: any[]): void client | 
| 外部调用本模块的某个操作 | 
onStart(): void client | 
| 生命周期方法-启动模块时调用 | 
onUpdate(dt: number): void client | 
| 生命周期方法-刷新模块调用 | 
Type parameters 
T | T | 
|---|---|
S | extends Subdata<S> | 
Accessors 
data  
•   | ||
|---|---|---|
本地玩家的模块数据 Returns 
  | 
localPlayer  
•   | ||
|---|---|---|
获取当前玩家 Returns 
  | 
localPlayerId  
•   | ||
|---|---|---|
获取当前玩家ID Returns 
  | 
server  
•   | 
|---|
和自己绑定的服务端模块,可通过此对象直接调用net_开头的服务端方法 Returns  | 
T | 
|---|
Methods 
onAwake  
• Protected onAwake(): void client
生命周期方法-创建模块时调用
onDestroy  
• Protected onDestroy(): void client
生命周期方法-销毁模块调用
onEnterScene  
• Protected onEnterScene(sceneType): void client
生命周期方法-进入场景调用
Parameters 
sceneType number | 场景类型(预留) range: type: | 
|---|
onExecute  
• Protected onExecute(type, ...params): void client
外部调用本模块的某个操作
Parameters 
type number | 操作类型 range: type: | 
|---|---|
...params any[] | 操作参数 | 
onStart  
• Protected onStart(): void client
生命周期方法-启动模块时调用
onUpdate  
• Protected onUpdate(dt): void client
生命周期方法-刷新模块调用
Parameters 
dt number | 两帧之间的时间差(单位:秒) range: type:浮点数 | 
|---|