相位技术
相位技术大规模出现在魔兽世界WLK版本, 现在应用已经广泛应用在各种MMORPG游戏中. 下面对相位技术的做法进行简单归纳汇总
表现分类
副本相位
早期副本的出现, 避免抢怪问题. 所以, 副本其实本身就是一种相位技术. 只不过实现时, 我们一般会将小队和怪物直接预分配在独立的一个副本实例中(所以副本原文也是实例的意思)
分线相位
相位技术还没有正式命名时, 同一个场景, 玩家进到不同的分线看到的玩家不一样, 也是属于相位的一种. 当然, 如果是组队玩家, 服务器默认会分配所有队伍玩家在同一个线(位面)
真相位
副本相位和分线相位其实都是静态相位, 一旦进入, 中途不会有切换或者混合查看的过程. 真相位可以在一个场景中,动态切换相位, 相位内和相位外所以不同
我们常见的真相位表现为: 相位中的角色+玩家+队伍成员
在护送任务时, 还会在上面所见角色中叠加世界中的所有角色, 也就是说, 你和队伍成员可以看到的角色, 其他人看不到, 其他人也看不到你和你的队伍成员
为了清晰的简单的描述, 我为相位创建如下概念与名词
相位客体
表现为除玩家外的角色(怪物,交互物体与相位可见场景)
私有客体
这是最常见的一种相位内角色
持有变量
取PhasingID时,为PhasingTargetID
生成规则
当玩家开启相位后, 在玩家相位内生成的角色为私有客体.
此时, 将 PhasingTargetID设置为相位生成者的实例ID
删除规则
如果玩家退出相位, 私有客体会存在一段时间或按照需求删除
公共客体
一般指提前放置在场景中, 世界内不可见, 但是能被同相位玩家可见,且同相位玩家都可以互相可见 比如: 只要接了同一个任务的玩家, 都可以看到的NPC
持有变量
取PhasingID时,为PublicPhasingID
生成规则
通过场景编辑器, 放置角色时, 设置其可被观察到的任务ID
角色被加载后, 将任务ID设置到StaticPhasingID
删除规则
场景删除, 角色删除
相位主体
包含玩家与同队伍玩家
相位开启时, 取PhasingID时, 为角色实例ID
相位关闭时, 取PhasingID时, 为0
PublicPhasingID
可见规则
当两个角色的PhasingID相等时, 主体与私有客体互相可见
当两个角色的PublicPhasingID相等时, 主体与公有客体互相可见
可以通过开关设置, 是否在可见的相位客体基础上, 叠加世界角色(护送任务)
约束