用Unity做个游戏(一) - 开新坑

之前那篇cocos转unity的系列算是坑了(撒花

前言

自己是在用unity去尝试做游戏的,中间也遇到了很多很多各种各样的问题,也都在努力去解决。

到目前为止也取得了很明显的成果:主流程都是通的,现在允许多个玩家同时在线,在同一个场景中移动,转向,释放技能;服务器也能妥当的同步各个玩家的信息给所有人。

不过问题也越来越多,由于现在网络通讯机制的问题,总是会出现莫名其妙的网络断开,而且断开的只是客户端接收响应的通道,客户端依然能够发给服务端消息, 服务端也可以收到,当然也正常地返回结果给客户端,然而这里客户端就收不到了。

另外一个情况是:现在的同步机制是客户端各自模拟逻辑和运动,服务端只是负责同步各自的位置,某个玩家把自己的位置告知服务端,服务端再广播给所有其他玩家。这样就会有个问题,由于网络延迟的存在,不同玩家看到的场面局势是不一样的,而且现在也没有对技能释放出来的抛出物进行同步,那些火球的攻击判定也是客户端自行判断的,而且不同客户端的判断结果很有可能不一样,这已经很难再进行优化了,要改的话必须改成由服务端计算所有移动判定逻辑,客户端只负责发送指令和显示服务端推送的位置信息,自己移动时客户端不做移动,仅当传送给服务端的指令信息被处理,服务端推送给客户端位置变化的

开个新坑

既然之前的项目写崩了,还是重新新开一个坑吧233这次决定开源,之后的博客会尽量同步实际的开发进度,文章里也会贴出部分代码,完整的代码可以去github上找,地址是这里

当然现在的话,想做个完整的游戏还是很难,主要问题还是没有美术,没有美术,没有美术orz

反正做这个项目的主要目的还是学习,美术资源的话考虑去AssetStore找找。

じゃ、 始まりましょうね~

创建项目

新建一个unity项目(我使用的是此时unity的最新稳定版5.5.2f1),首先为了版本控制,先做一些设置:

Edit->Project Settings->Editor里面找到Version Control-Mode,选择Visible Meta Files。还有Asset Serialization-Mode,选择Force Text

pic1

这样做的作用在于可以更好地让unity在git之类的版本控制工具下工作,使所有Assets的Meta文件可见且被版本控制工具管理,强制把所有Assets以文本方式存储,虽然这样做的话可能会使asset的文件尺寸变大,不过以纯文本代替二进制存储在版本控制系统中的好处是很多的,首先可以更方便直观地比较文件版本之间的差异,而且当不同的人同时编辑同一个文件时,两份文件可以很方便的被合并,二进制存储的话就不行了,只能独占签出来避免冲突。

然后,再找到Edit->Project Settings->Player,把里面的Run In Background打上勾

pic2

其实这个选项并不是必须的,只不过我们这个游戏是多人联机的,所以到时候测试的时候肯定要多开,如果不允许后台运行的话窗口失去焦点的时候游戏就会自动暂停运行,我们可能就不能很方便地观察同步情况了。

目录结构

这个根据个人习惯来定就好了,我这个项目是这样:

1
2
3
4
5
6
7
8
9
10
11
Assets              - Assets根目录
| - Prefabs - 保存所有预设体
| - Views - 每个UIView的预设体,即MVP结构UI的M部分
| - Scenes - 游戏场景
| - Scripts - C#脚本
| - Conf - 配置相关,包括Data和Utils
| - Entity - 游戏场景中各种类型的实体,如角色,火球
| - Event - 事件系统
| - Gameplay - 游戏逻辑相关
| - Network - 网络通信相关
| - UI - MVP结构UI的VP部分

在之前的坑里是这样的,因为暂时还没有做视觉相关的东西,也没有涉及到外部的美术素材,所以像Materials,Resources之类的目录暂时还没有(doge),不过以后肯定会有的。。