lesson1 基本设置
Unity中关于光源的mod
https://docs.unity3d.com/2017.3/Documentation/Manual/LightModes.html
烘培光照,环境光设置,全局光照的区别和联系
Unity光照相关知识和实践 (烘焙光照,环境光设置,全局光照)_unity使用bakery打光烘焙-CSDN博客
lesson2 UI架构
1.如何使生成的脚本带上日期和署名
UniTask
Unity 自动添加头注释代码后无法创建新脚本_unity onwillcreateasset-CSDN博客
2.使用和加深对异步操作的理解
精选Unity-Github开源库分享 最完美的异步操作解决方案 UniTask (一)简介和安装_哔哩哔哩_bilibili
3.AsyncLoadScene 异步加载的场景
Unity异步加载场景SceneManager.LoadSceneAsync与AsyncOperation的使用-CSDN博客
Unity3D RectTransform使用详解:布局、属性、方法、设计 - 知乎
4.playerprefs
Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园
5.让龙重复飞翔动画
Unity中Invoke和InvokeRepeating的使用_unity invokerepeating-CSDN博客
6.在消息队列中上锁
7.音频消息爆FBS错误的在线修音频网站
8.如何让表格显示属性:用xml语言编一个样式,在excel中的开发工具加上一个xml原再映射就行了,表填完还能再导出xml的格式
xml脚本,会有ID ,man ,woman三个栏
XML在C#与Unity3D中的实战运用 - PlaneZhong - 博客园
<?xml version="1.0" encoding="UTF-8"?>
<root>
<Item ID="">
<surname></surname>
<man></man>
<woman></woman>
</Item>
<Item ID="">
<surname></surname>
<man></man>
<woman></woman>
</Item>
</root>
lesson3 网络通信
C#开源网络通信库PESocket的使用 - PlaneZhong - 博客园
PEProtocol协议:
GameMsg 定义网络传输的内容,对象和数据
网络协议对于客户端和服务通用 Req和Rsp表示客户端到服务器和服务器到客户端
基于框架PESocket开发而成
public class GameMsg:PEMsg
{
public ReqLogin reqLogin;
public RspLogin rspLogin;
}
/*这里想要网络传输东西,不可能逐字段检验,不然太冗长了*/
/*添加一个cmd和对应的类非常重要*/
cmd是已经在PESocket中封装好了
public static readonly string obj = "lock";
/*这里加锁是因为每次的传来消息的线程id是变化的,多线程*/
//*网络接受用多线程是因为快,网络是IO,或者逻辑写多线程最后改数据加锁也行*//
private Queue<MsgPack> msgPackQue=new Queue<MsgPack>();
PECommon:服务和公共类,封装后不用每个程序都加头文件
public static void Log(string msg="", sssType tp = sssType.Log)
{
LogLevel lv = (LogLevel)tp;
PETool.LogMsg(msg, lv);
}
Server服务器内容
ServerRoot:服务器初始化定义
ServerStart:服务器启动,并且while来一直读取服务器
NetMsg:定义服务器会话ServerSession内容,和服务器的包,消息队列,加锁防冲突,并实现对消息的添加方法,以及消息的分发
ServerSession :继承自ServerSession : PESession<GameMsg> 并实现对与网络会话的功能,链接,接受,断开
protected override void OnReciveMsg(GameMsg msg)
{
PECommon.Log("客户端收到请求:" + ((CMD)msg.cmd).ToString());
MsgPack pack = new MsgPack(this,msg);
NetSvc.Instance.AddMsgQue(pack);
}
LoginSys:登录系统,大部分的登录的操作
Cache:缓存,实际上是多个字典来快速的对应玩家-密码-账号数据
lesson4 数据库的开发
查询
MySqlCommand cmd = new MySqlCommand("select * from account where acct = @acct", conn);
cmd.Parameters.AddWithValue("acct", acct);
reader = cmd.ExecuteReader();
id = reader.GetInt32("id"),
name = reader.GetString("name"),
lv = reader.GetInt32("level"),
exp = reader.GetInt32("exp"),
power = reader.GetInt32("power"),
coin = reader.GetInt32("coin"),
diamond = reader.GetInt32("diamond")
try 和 catch,finally的用法
finally
{
if (reader != null)
{
reader.Close(); //必须关掉不然一直在这一步,就是不会继续执行下一步
}
}
//对于快速的要求来说就是数据一单缓存就立刻返回到客户端
//保证缓存的内容一定能写入数据库,因为数据库可能会返回失败
服务器服务启动与运行逻辑
服务器启动过程:
1.服务器启动过程包括完成各个服务及数据层、业务层的初始化在SeverStart中。
2.服务器在update中驱动网络消息检测,收到消息后分发到各个业务系统。
3.登录系统处理登录及重命名相关逻辑。
客户端运行与登客户端运行与登录流程录流程
客户端登录与运行
1.客户端运行过程包括在GameRoot中初始化各个服务模块系统,进入登录场景。
2.登录场景加载过程中更新进度条,加载完成后打开登录界面。
3.输入账号密码后点击登录,触发服务器通信
登录请求:登录请求处理流程
1.客户端发送包含账号密码的网络消息到服务器。
2.服务器通过缓存模块判断账号是否上线,若不存在则查询数据库创建新账号。
3.服务器将账号数据缓存并返回登录回应消息到客户端。
客户端登录回应处理
客户端回复
1.客户端接收登录回应消息,并保存到中。
2.判断回应数据中的名字是否为空,若为空则打开角色创建面板。
3.玩家在创建面板中确定名字后点击登录,发送名字到服务器进行验证。
4.服务器处理名字验证,检查名字是否已存在,并更新缓存和数据库。
服务器和客户端的区别就在于数据的缓存
1.客户端发送包含账号密码的网络消息到服务器。 2.服务器通过缓存模块判断账号是否上线,若不存在则查询数据库创建新账号。 3.服务器将账号数据缓存并返回登录回应消息到客户端。