龙裔战争项目梳理

1 登录UI部分使用: 使用unity自带的UGUI系统 登录界面 游戏大厅 游戏房间 创建房间等功能 使用canvas画布
玩家点击不同的按钮,登录使用Logincontroller脚本控制不同canvas的激活.
登陆部分, PUN封装的登录函数进行登录操作
1 客户端向服务器发送游戏的AppID和标识符
2 Nameserver将管理版本游戏的Masterserver IP发送给客户端
3 客户端连接MasterServer, 向masterServer请求游戏大厅列表
4 masterServer返回游戏大厅列表给server

玩家的基本信息使用Photon的HashTable保存, ID,准备情况,分数,杀敌数目
游戏房间玩家选择不同类型的龙, 观看不同龙的模型和介绍, 模型和介绍会自动更新, 并且播放相应的动画.
此时只在本地更改, 当玩家点击确认选择, 使用RPC方法调用每个客户端的回调函数, 更新RoomInfo可选用龙的列表.

只编写了客户端程序,游戏逻辑在客户端处理, Photon服务器负责客户端之间数据的验证与传递.


给本地客户端游戏对象添加PhotonView组件, 本地客户端对象与其他客户端对象可以进行数据传递.
直接将需要同步的组件设置在Observed Components中(同步帧率小于人眼, 使用线性插值)
OnPhotonSerializeView(序列化)
RPC远程过程调用

2 游戏过程:
MatserClient是游戏中的客户端,由进入房间的第一个玩家担任,玩家离开房间自动更换人员.
进入游戏, 游戏中的静态场景由各个客户端各自生成. 随机产生的道具由master客户端生成.
玩家由玩家属性中的类型,生成相应的龙.
玩家的位置和朝向同步使用photonView中的observed component方法.

玩家预制件上挂载了捡道具回血回蓝脚本, 使用OntriggerEnter回调函数 (忽略物理碰撞)
使用标志位kind触发完以后检测kind是否扔为没被其他玩家触发, 然后标志位更改, 进行网络传输.调用RPC函数 通知matser玩家destroy血瓶
使用Translate方法 根据xz的偏移 一次移动一小段. 本来是用添加力的作用,速度越来越快,不好控制.

玩家基本技能碰撞 检测出两方 都为普通状态 无操作
我方为普攻,对方为没有开启普通攻击, 使用RPC给对方一个相反方向的作用力, 同时减去一部分血量.

当龙抢占相应的技能时, 技能就可以使用,使用hash表存储所有技能.
土龙:RPC发送给所有客户端, 攻击周围的人0.2s, 周围碰撞体打开, startCorotine协成, 在该碰撞体周围的人扣血
水龙:回血
风龙:速度加快
雷龙:瞬移,容易移动到预制体中 从朝向方向, 发出一条射线, 如果会与其他物体碰撞, 则失败.
火龙:强攻

游戏过程的UI和结算系统:
游戏顶部显示当前游戏排名,显示技能数目 杀敌数目 显示第一名玩家 和本地玩家.
左边显示游戏小地图, 各个玩家位置和祭坛位置.Render Texture 新建摄像机 地图layer为miniMap
在每个玩家的GameSystem脚本的update中定期检查自己的技能数目是否达到3个, 达到三个开始计时10s.到达10s使用RPC结束,中间数目不为3,则计时器置0.
中间的实时排名.遍历游戏房间中的所有玩家信息, 按照技能数目和杀敌次数死亡最少次数优先级排序, UI上显示第一名和当前玩家游戏排名.

原文地址:https://www.cnblogs.com/timesdaughter/p/6704299.html