前端项目关键步骤归纳
- 在Unity项目,PackageManager中导入Fantasy.Unity包。
- 在unity场景中创建一个Network的游戏物体,创建一个Entry.cs 启动脚本挂上去。
- 导出配置表和协议。
Fantasy创建项目引入框架三篇:
[Fantasy起步]创建前端项目引入Fantasy.Unity
[Fantasy 起步] 创建后端项目引入 Fantasy.Net
[Fantasy 起步]导出配置表与消息协议
开始准备项目
创建一个将包含前后端项目的整体目录:Best_Practices
将框架仓库根目录的Fantasy.Net,Fantasy.Unity复制到整体目录
下面图所示分别是Fantasy.Net网络库
,Fantasy.Unity前端通信包
,本身项目的前后端放在BestGame
中。
本身项目前后端目录结构:
- Bin目录一开始是空目录,服务端编译会输出到这个目录
- Config是配置文件目录,protobuf文件,配置表excel文件在这个目录
从框架仓库examples项目中复制一份Config到这里。
在框架中位置 \Fantasy\examples\Communication-MMO-Examples\Config
- Server目录是服务端项目的目录
- Tools从框架仓库的根目录复制到这里。
在还不太熟悉框架的时,就按上面安排项目结构,这样导出文件会正确的生成到指定目录。导出配置表与消息协议后,会生成覆盖旧的配置文件与协议文件。
前端项目操作(Unity引擎编辑器)
在unity引擎编辑器,创建unity项目到 \BestGame\Unity\
目录下。
PackageManager中导入Fantasy.Unity包
。
Unity的前端包在框架仓库根目录下:\Fantasy.Unity
如果出现Unity编辑器报:找不到Fantasy.Unity包。
还有一种方法,直接编辑Unity项目Packages目录下的manifest文件,可以根据相对目录
自己修改
\BestGame\Unity\Packages\manifest.json
文件
"dependencies": {
"com.fantasy.unity": "file:../../../Packages.Unity/Fantasy.Unity",
在unity场景中创建一个 Network
游戏物体,创建一个Entry.cs 的脚本挂上去。
BestGame\Unity\Assets\Scripts\Network\Entry.cs
using System;
using Fantasy;
using Fantasy.Core.Network;
using Fantasy.Helper;
using Fantasy.Model;
using UnityEngine;
public class Entry : MonoBehaviour
{
public Scene Scene;
public bool IsConnect;
void Start()
{
// 框架初始化
Scene = Fantasy.Entry.Initialize();
// 把当前工程的程序集装载到框架中、这样框架才会正常的操作
// 装载后例如网络协议等一些框架提供的功能就可以使用了
AssemblyManager.Load(AssemblyName.AssemblyCSharp, GetType().Assembly);
// 连接服务器
ConnectServer();
}
private void ConnectServer()
{
// 创建网络连接
// 外网访问的是SceneConfig配置文件中配置的Gate 20000端口,Realm 20001端口
// NetworkProtocolType:网络协议类型
// 前端要与后端SceneConfig配置文件中配置的Gate,Realm一样的协议类型才能建立连接
Scene.CreateSession("127.0.0.1:20000", NetworkProtocolType.KCP, OnConnectComplete, OnConnectFail, null);
}
private void OnConnectComplete()
{
IsConnect = true;
// 挂载心跳组件,设置每隔3000毫秒发送一次心跳给服务器
Scene.Session.AddComponent<SessionHeartbeatComponent>().Start(3000);
Log.Debug("已连接到服务器");
}
private void OnConnectFail()
{
IsConnect = false;
Log.Error("无法连接到服务器");
}
}