Unity游戏逻辑服务器实践

0x01:前言

由于服务器需要做客户端战斗模拟,我们的服务器是用python写的,理所当然我们战斗服务器也采用python重写了一套战斗服务器,遇到了哪些问题:

1、浮点数运算精度问题

2、运行效率问题

3、Unity核心库源码问题

0x02:奇思妙想

我们团队内部想,既然客户端有现成的代码,何不自己实现网络通信部分,把战斗部分代码剥离出来,直接用Unity导出运行文件不就行了,况且Unity支持跨平台。好吧又一次我们天真了。遇到问题:

1、线上服务器的操作系统版本,Unity不支持

2、线上服务器只有很弱的VGA(Standard VGA Graphics Adapter)集成显卡,Unity压根不支持

0x03:回到本源

1、Unity如何实现跨平台

2、Unity那些核心库需要自己实现

0x04:问题解决

1、引入Mono

2、统一部分Unity库

3、剥离战斗部分代码

4、添加网络通信

0x05:反思

1、游戏整个设计过程中,如果要做录像功能,需要将渲染这部分代码有抽象层,这样在后期做秒算,或者服务器运算的时候,只要实现渲染这部分的逻辑即可

2、Unity里动画事件回调,需要自己实现一套配置文件,因为在快速验算的时候,不能调用Unity动画关键帧回调函数

3、游戏的时间需要自己控制,包括Update, 如果每个物件自己控制Update,没有有效的手段控制逻辑执行顺序

4、游戏的时间,需要自己控制,在不同的战斗中,帧速率是不一样的,对应的时间也是不一样的

5、对于Unity里的协程,由于不能控制执行逻辑顺序,需要自己实现一套

6、游戏里用到了A* 寻路插件,这个寻路插件里实现用到多线程和一些随机数,寻路这块自己也需要实现

时间: 2024-08-28 02:37:46

Unity游戏逻辑服务器实践的相关文章

内存是手游的硬伤——Unity游戏Mono内存管理与泄漏

WeTest导读 内存是游戏的硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象.本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存管理问题,并介绍了一系列解决的策略和方法. 内存是手游的硬伤 无论是游戏还是VR应用,内存管理都是其研发阶段的重中之重.然而,90%以上的项目都存在不同程度的内存使用问题.就目前基于Unity引擎开发的移动游戏和移动VR游戏而言,内存的开销无外乎以下三大部分: 1.资源内存占用: 2.引擎模块自身内存占用: 3.托管堆内

游戏行业服务器应该怎么选

游戏服务器其实和一般的服务器一样,但是因为行业的特殊性原因,游戏服务器对服务器的性能要求更高,对带宽资源的要求也更高.但是也不是所有的游戏供公司都一定要选择高配置的服务器,游戏公司应该按照自己的游戏类型和用户群体的特性来选择配置和带宽.比起普通的服务器,游戏行业服务器具有以下特点: (一) 服务器的CPU大型的游戏要接受大量的访问请求,CPU的快速吞吐量.稳定性.长时间运行都有着严格的要求,因而服务器CPU是衡量服务器性能的首要指标.之前提到根据游戏的类型不同,小型游戏选择线程低的配置就可以满足

在Unity中使用Lua脚本:语言层和游戏逻辑粘合层处理

前言:为什么要用Lua 首先要说,所有编程语言里面,我最喜欢的还是C#,VisualStudio+C#,只能说太舒服了.所以说,为什么非要在Unity里面用Lua呢?可能主要是闲的蛋疼.....另外还有一些次要原因: 方便做功能的热更新: Lua语言的深度和广度都不大,易学易用,可以降低项目成本. C#与Lua互相调用的方案 坦白来将,我并没有对现在C#与Lua互相调用的所有库进行一个仔细的调研,大概搜了一下,找到这样几个: slua:https://github.com/pangweiwei/

Unity 2D游戏开发教程之使用脚本实现游戏逻辑

Unity 2D游戏开发教程之使用脚本实现游戏逻辑 使用脚本实现游戏逻辑 通过上一节的操作,我们不仅创建了精灵的动画,还设置了动画的过渡条件,最终使得精灵得以按照我们的意愿,进入我们所指定的动画状态.但是这其中还有一些问题.例如,我们无法使用键盘控制精灵当前要进入的动画状态,而且精灵也只是在原地播放动画而已.但我们希望精灵在进入到PlayerWalkingAnimation状态时,位置应该发生改变. 要解决这些问题,就需要编写脚本.也就是说,要使用脚本来实现动画的播放控制,以及其它一些游戏的逻辑

C#开发Unity游戏教程之游戏对象的行为逻辑方法

C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑--方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要内容是变量,但是在章节的最后为了展示游戏效果,也用到了它.现在看来方法真的是无处不在,并且不可或缺.它甚至都可以影响游戏对象的行为逻辑!因此本章终于到了不得不介绍它的时候了. Unity游戏对象的行为逻辑 游戏场景中,有些游戏对象是静止的,例如,树木.山峰.石头等等.而另外一些游戏对象则是运动的,它

干货推荐:如何运维千台以上游戏云服务器——游族网络

干货推荐:如何运维千台以上游戏云服务器——游族网络 来自上海游族网络的运维总监李志勇,在3月4日云栖社区中带来的分享“如何运维千台以上游戏云服务器”.本次分享重点是云时代的运维,包括游戏上云部署整体方案.游戏服务器批量运维管理,并对企业选择RDS还是自建MySQL数据库给出了自己建议. 关于分享者: 李志勇,2010年加入游族网络,目前担任游族网络运维总监,全面负责游族网络运维业务.他具有十年运维工作经验,八年游戏行业从业经验,专注于游戏虚拟化技术和网络优化. 分享正文: 游戏产品架构进化史  

传奇源码分析-客户端(游戏逻辑处理源分析四)

现在假设玩家开始操作游戏:传奇的客户端源代码工程WindHorn一.CWHApp派生CWHWindow和CWHDXGraphicWindow.二.CWHDefProcess派生出CloginProcess.CcharacterProcess.CgameProcess客户端WinMain调用CWHDXGraphicWindow g_xMainWnd;创建一个窗口.客户端CWHDXGraphicWindow在自己的Create函数中调用了CWHWindow的Create来创建窗口,然后再调用自己的C

传奇源码分析-客户端(游戏逻辑处理源分析五 服务器端响应)

器执行流程:(玩家走动) GameSrv服务器ProcessUserHuman线程处理玩家消息:遍历UserInfoList列表,依次调用每个UserInfo的Operate来处理命令队列中的所有操作; pUserInfo->Operate()调用m_pxPlayerObject->Operate()调用.判断玩家if (!m_fIsDead),如果已死,则发送_MSG_FAIL消息.我们在前面看到过,该消息是被优先处理的.否则则调用WalkTo,并发送_MSG_GOOD消息给客户端.Walk

游戏开发手记:游戏逻辑模块组织及数据同步

这周工作主要分两部分,一是服务器这边的基础模块搭建,二是服务器与客户端通信模式以及数据同步等方案的协定和验证.总体来说进展不错. 服务器采用actor模式来构建,目前暂时把服务器上运行着的actor叫做service,每个service维护一个请求队列.一个goroutine不断取出请求并进行处理.一组负责处理消息的逻辑模块.游戏服务器里的每个玩家都是一个service,不隶属玩家的功能模块也作为service运行(如排行榜.聊天.公会),还有其他全局模块也作为独立的service运行(如玩家i