[开发者心得] [踩坑分享] 属性同步replicated

[复制链接]
1001 |0
羽逸之光 发表于 2023-4-7 14:15:48 | 显示全部楼层 |阅读模式
本帖最后由 俊记牛腩面 于 2023-10-31 14:32 编辑

一.  数组元素属性同步中(027已经修复)
服务器更改数组的操作:Array[0] = 0;Array = [0,1,2,3];Array.push(0)均可以同步给客户端
服务器删除数组的操作:
Array.shift()可以同步给客户端
Array.splice()完全不会客户端同步
Array.pop()会通知客户端,但不会同步数组数据
二.   021属性同步有优化带宽,从Json改成了C++里定义好的基础类型,自定义类型可以传Null, Number String Bool Vector等基础类型不能传Null(027也可以穿Null)
样例:
@Component
export default class Replicate extends Script {
    @mw.Property({ replicated: true, onChanged: "onHomeChanged" })
    homeId: number = 0
    @mw.Property({ replicated: true, onChanged: "onVecChanged" })
    vec: number[] = [1]
    protected onStart(): void {
        if (SystemUtil.isClient()) return
        this.homeId = null
    }

    protected onUpdate(dt: number): void {

    }

    protected onDestroy(): void {

    }
    onVecChanged() {
    }

    onHomeChanged() {
        console.log("home", this.homeId)
    }
}

三.  对于带有mw.Property()标记的引用类型,不要直接用一个变量去多次接受这种变量类型,由于使用的CPU逐渐增加,会导致越来越卡顿。
样例:
@Component
export default class Replicate extends Script {
    @mw.Property({ displayName: "移动点1" })
    point: Vector = Vector.zero
    @mw.Property({ displayName: "移动点2" })
    point2: Vector = Vector.zero

    private _startPos: Vector
    protected onStart(): void {
        this.useUpdate = true
    }

    protected onUpdate(dt: number): void {
        this._startPos = this.point;
        this._startPos = this.point2;
    }

    protected onDestroy(): void {

    }
}

解决方案:
使用clone(),set()来设置
this._startPos = this.points.clone();
this._startPos = this.points2.clone();
this._startPos.set(this.points);
this._startPos.set(this.points2);

四.自定义属性mw.Type使用方法
/**宠物技能类 */
@Serializable
export class PetSkill {
    @mw.Property({ displayName: "技能id" })
    skill: number[] = [0]
}
/**玩家宠物类 */
@Serializable
export class Pet {
    @mw.Property({ displayName: "宠物名称" })
    petName: string = ''
    @mw.Property({ displayName: "宠物技能" })
    vec: PetSkill[] = [new PetSkill()]
}



@Component
export default class Replicate extends Script {

    @mw.Property({ displayName: "角色宠物" })
    pets: Pet[] = [new Pet()]

    private _startPos: Vector
    protected onStart(): void {
        this.useUpdate = true
    }

    protected onUpdate(dt: number): void {

    }

    protected onDestroy(): void {

    }
}

111.png






回复

使用道具 举报

72小时热榜
热门版块
快速回复 返回顶部 返回列表