[开发者心得] 坤坤出品|PrefabEvent二次开发教程——玩家信息协议③

[复制链接]
1460 |1
森林鹿 发表于 2023-3-3 17:43:58 | 显示全部楼层 |阅读模式

不懂这是什么的小伙伴建议先看初始化流程①哦~

玩家信息协议(PrefabEvtPlayerInfo)

可以用于设置玩家的各种信息,具体可以查看PlayerInfoType枚举,这部分的属性主要是面向玩家本身的属性,可以用于定义玩家当前的名字、等级、经验、金币、积分、关卡、人气,其中关卡属性由玩家系统进行管理,这类属性我们一般先通过setPlayerInfo和onSetPlayerInfo来具体定义具体的值,然后通过addAttrVal去改变相关的值。


示例-做一个玩家积分增加:

       首先需要使用setPlayerInfo去设置玩家的当前积分,然后每次当玩家触发了得分行为后进行加分。同样我们也需要使用监听协议去监听这个信息,然后在我们需要显示这些信息的预制体中去显示相关的信息。下面代码示例中在客户端增加了玩家的分数,而在客户端中去增加并记录这个值。如果收不到信息可以尝试看看是不是PrefabEvent中的addPlayerInfo这个属性项是否不是这个值,需要进行修改。

image.png




if (Util.SystemUtil.isServer()) {
    //获取触发器
    let trigger = this.gameObject as Gameplay.Trigger;
    //向触发器添加监听
    trigger.onEnter.add((chara: Gameplay.Character) => {
        //如果是玩家进入了触发器
        if (chara instanceof Gameplay.Character) {
            //玩家属性变化
            PrefabEvent.PrefabEvtPlayerInfo.addPlayerInfo(this.gameObject.guid, chara.guid, 100, PrefabEvent.PlayerInfoType.Score);
        }
    });
}
else if (SystemUtil.isClient()) {
    //监听玩家属性变化
    PrefabEvent.PrefabEvtPlayerInfo.onAddPlayerInfo(async (senderGuid: string, targetGuid: string, val: number, infoType: PrefabEvent.PlayerInfoType) => {
        let player = await Gameplay.asyncGetCurrentPlayer();
        //获取当前玩家及其角色的guid
        let selfGuid = player.character.guid;
        //检测变化的是否是自己,变化的属性是否是分数
        if (infoType == PrefabEvent.PlayerInfoType.Score && targetGuid == selfGuid) {
            //增加当前的分数
            this.score += val;
            console.log("当前的积分值" + this.score)
        }
    })
}

回复

使用道具 举报

随遇而安 发表于 2023-4-21 21:07:25 | 显示全部楼层
为什么编辑器全部报错
回复

使用道具 举报

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