基于Unity的游戏Demo

这个项目的最初设想是复刻黑暗之魂的游戏机制,后续主要因为美术素材不足,很大程度简化了最初的设计.另外参考GTA之后,加入了第三人称射击视角. 整体制作较为粗糙,主要实现了主流动作游戏的一些基本机制.

链接: apk下载

链接: exe下载

操作简介

基本操作方法如下:

主菜单界面

游戏界面

PC端则采用键鼠或手柄操作,手柄只要试一下各个按键就知道功能了,键鼠操作如下。

ESC打开游戏内菜单.
WASD移动.
按住Left-Shift为奔跑.
Left-Alt为翻滚
Space为跳跃.
鼠标移动旋转视角.
鼠标左键为攻击.
鼠标右键为瞄准/格挡.
鼠标中间为锁定目标/重置镜头,仅在使用近战武器时可以锁定目标,切换为手枪时,会解除锁定.

开发经验

主要的工作量以及问题,基本在以下三个方面.

1.人物动作系统

最初设想是Animator分为3层,分别是上半身层,下半身层,全身层.部分动作仅上半身或下半身,部分动作是全身. 但中途发现切换权重时出现了非预期的现象,最终只用了上半身层,下半身层.那些全身动作就放在上下半身同时执行.

另外一点就是脚部ik处理,实现起来比预期简单很多.

链接:动画系统 记录了这些内容.

2.镜头控制

在开发之前,原以为镜头控制非常简单,但实现起来,遇到了一些问题.

其中主要问题是角色运动基于物理引擎,而每一帧之间FixedUpdate()执行次数不固定,以至于有很明显的镜头抖动.

链接:镜头控制 记录了黑魂镜头的开发经验.

另外还有参考GTA的肩部射击视角,也花了一些心思,但最终还是没有达到GTA中的效果,实现方法并不难,故没有写文章记录了.

3.网络同步 原以为3A动作游戏都是采用帧同步来实现网络同步,但在参考了黑魂和荣耀战魂的资料之后,发现这些游戏都是基于状态同步.

其实想起来也很合理,这些游戏都有非常复杂的动作系统,而为此开发一套适合于帧同步的动作系统,至少动画系统和物理引擎都要大量改造. 得到的好处是在存在高延迟的玩家时,低延迟玩家体验较好.坏处是延迟不够低时,操作体验会较差.

值得一提的是,守望先锋居然是帧同步,在基础的帧同步之上,加上了纠错机制.

链接:《守望先锋》架构设计与网络同步.

在使用Unity的基础上,不太可能改动物理引擎或动画系统,而一般来说,实现帧同步需要使用定点数,所以这里也是不可能使用帧同步的.

链接:网络同步 记录了网络同步的开发经验.

仍然存在的重大缺陷

1.开发所使用的Unity版本为5.4.2,在这个版本里提供的非阻塞同步网络API(NetworkTransport),没有办法知道系统自动分配的端口号.而在最新的版本中,增加了一个方法获取端口号. 所以这里使用的是固定端口号27887,并没有处理这个异常,如果端口被占用,可能会出错.

2.触摸屏输入时,操作视角旋转的体验很差,明显感觉精确度不高,且存在抖动.由于手游接触较少,这方面经验不足,故没有处理这个问题.