开发环境
Unity版本编辑器
VS
SQL
Git
开发目录规划
创建目录 - 合理划分、便于管理
Art
Doc
Src
Tools
创建版本库 - 便于协作、版本追溯
项目准备
文档
策划文档
美术规范
技术文档
工具
配置表工具
- 如 Excel、二进制格式、CSV格式
协议工具
- 如 ProtoBuf
其他工具
框架
客户端
日志 - 易于使用、配置灵活 - 通用组件
配置 - 保存、读取、分辨率、关卡进度等等
数据加载 - 配置表、角色表、怪物表、等级表、掉落表等等
网络
基础组件 - 各种单例类等等
服务器(服务端)
日志
配置
数据加载
网络
DB访问(数据库访问)
基础组件
协议
Google Protobuf
协议创建
协议生成
筹备环节
资源准备
客户端环境准备
美术资源准备
各类资源导入
基本场景搭建
环境测试
服务器环境准备
准备项目
公共类库
引用组件
环境测试
DB访问测试
数据库生成
协议环境准备
文档准备
协议使用方案
协议编写
代码生成测试
网络消息处理
通讯组件(依据情况)
NetworkClient & TcpSocketListener
封包处理器 PackageHandler
消息分发器 MessageDistributer
消息分配处理 MessageDispatch
网络消息处理通信与协议_Break The Sky的博客-CSDN博客
socket编程入门:1天玩转socket通信技术(非常详细)
| 生成数据库:
右键 - 新增 - 实体
属性 - 右键 - 标量属性
右键 - 根据模型生成数据库 - 全部是是是
在 SQL Server Management 里【执行】 .sql 文件 - 然后表就会更新过去
| 生成协议编译成功:
如:注册加一个年龄
修改 - 如先加一个新字段:在UserRegisterRequest 【+】
int32 age = 3;
生成:Tools - genproto.cmd
查看:Src - Lib - Protocol - message.cs - 可以用git diff看到新增的内容
可以直接使用此类了
| 客户端发送消息到服务器
编写流程:
一. GameServer.cs - 服务监听
在
class GameServer
+NetService network;
在
public bool Init(){}
+network = new NetService();
andnetwork.Init(8000);
在
public void Start()
+network.Start();
在
public void Stop()
+network.Stop();
执行一下
二. 自建文件 - 初始化和链接到服务器
在 void Start ()
添加了
Network.NetClient.Instance.Init("127.0.0.1", 8000);
Network.NetClient.Instance.Connect();
三. message.proto - 修改协议
在
message NetMessageRequest
添加FirstTestRequest firstRequestr = 10;
新写一个
message FirstTestRequest { string helloworld = 1; }
先到服务器 - 右键选择解决方案 - 生成解决方案
将 \Src\Lib\Protocol\bin\Debug 下的四个文件粘贴到 \Src\Client\Assets\References 替换更新
系统框架
UI Layer
-
Logic Layer
Network
Data Transfer(会用)
协议:NCharacter
实体:Character
DB:TCharacter
地图服务(客户端)
角色管理器(客户端)
游戏对象管理器
玩家控制器
主角摄像机
网址推荐:Creating a World Space UI | Unity UI | 1.0.0
小地图
小地图的资源制作
实时渲染场景 - 【摄像机挂在上空 - 影响性能 - 写实性高】
预渲染顶视图 + 润色 -【用的较多】
纯美术制作
小地图的 UI 元素
小地图的配置与加载 - 如下
小地图与场景的坐标映射
小地图的配置与加载?
\Src\Data\Tables
下的 MapDefine.xlsx 文件 –> 修改Name + 添加一个字段(右键插入 - 修改即可)运行
\Src\Data
下的 Excel2Json.cmd 【右键编辑可以看到操作的事】到 GameServer 的
Common\Data\MapDefine.cs
中把新加的字段添加进去右键【生成解决方案】
在
\Src\Lib\Common\bin\Debug
下复制Common.dll(pdb)
【只改Data可以只复制Common这俩,后面四个是协议内容】 +protobuf-net.dll(xml)
+protocol.dll(pdb)
粘贴到
\Src\Client\Assets\References
替换掉
移动同步
状态同步 或叫 事件同步(守望先锋) 和 帧同步(Dota、星际等)
同步什么?
如:
位置 - Position、Direction、Speed
状态:Idle、Move、Jump、Attack
基本属性:Name、Hp、Mp
扩展信息:工会、外观、装备、详细属性等
同步的目标对象
Nentity:Position、Direction、Speed
↓
Entity:position、direction、Speed
↓
EntityController:Transform.position、Transform.forward
同步的流程
EntitySync 协议
EntitySync 的发送与响应
BUG
反复进入主城,角色不同步
【C】UICharacterSelect & Entity & MapService & UserService
【S】UserService & Map & CharacterManager
小地图找不到角色报错
- 【C】UIMinimap & MinimapManager
单例对象重复执行问题
- 【C】MonoSingleton
地图传送
创建传送点
传送点的配置
编辑器扩展:传送点数据生成
传送协议与实现