[开发者心得] [小知识] odin框架数据模块Subdata中onDataChange使用方式

[复制链接]
1301 |1
冰玥 发表于 2023-4-3 10:44:25 | 显示全部楼层 |阅读模式
本帖最后由 冰玥 于 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不会被调用



回复

使用道具 举报

天启 发表于 4 天前 | 显示全部楼层
请问如果想监听模块数据中某个数据改变有办法吗?
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表