本帖最后由 冰玥 于 2023-11-7 18:10 编辑
当需要监听某个模块数据改变,就可以在Subdata中onDataChange中添加事件去监听数据的改变
下面是onDataChange使用的一个的示例:
export class ModuleData extends Subdata {
@Decorator.persistence()
public name: string = "";
public changeName(name: string) {
this.name = name;
//this.save(true);
this.syncToClient();
}
}
export class TModuleC extends ModuleC<TModuleS, ModuleData>{
protected onAwake(): void {
this.data.onDataChange.add(() => {
console.log("ModuleC changed")
})
}
setName(name: string) {
this.server.net_setName(name);
}
}
export class TModuleS extends ModuleS<TModuleC, ModuleData>{
protected onPlayerJoined(player: Player): void {
this.getPlayerData(player).onDataChange.add(() => {
console.log("ModuleS changed")
});
}
net_setName(name: string) {
this.currentData.changeName(name);
this.currentPlayer.character.displayName = name;
}
}
ModuleService.registerModule(TModuleS, TModuleC, ModuleData)
使用注意事项:
1.onDataChange 能从S端Call到C端,原因它使用dispatchToClient 进行了一次rpc调用
2.使用 syncToClient()保存数据,会将模块数据从S端同步给C端,从而调用onDataChange
3.使用save(false)保存数据,onDataChange 只会在S端生效,想要在C端生效就必须使用save(true)
4.必须使用 syncToClient()或save()方法保存,不然onDataChange不会被调用
|