本帖最后由 冰玥 于 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不会被调用 
 
 
 
 |