LAN TPS Game
项目地址
游戏框架
依据作业要求,同时参考 CSGO 以及 PUBG,制定如下框架图。
制作
实现思路
- 单独完成联机大厅以及相关 UI 。
- 实现人物的动画逻辑以及射击功能。
- 制作训练营地图,实现单人与训练营的交互。
- 实现多人与训练营的交互。
- 制作积分板。
- 完成对战地图。
- 制作 AI 。
- 实现多种武器。
- 完善动画细节。
- 移植到安卓。
联机大厅
为了方便日后复用这套局域网联机框架,大厅的地图和人物框架都是独立的,在开始游戏后用联机漫游将会话带入游戏地图中。
其中颜色调整(材质替换)是通过将 PlayerIndex 的复制属性设置为 RepNotify 后调用系统生成的广播函数 OnRep_PlayerIndex 。
而玩家列表和聊天记录都是通过生成子 widget 添加进垂直框中实现的。
人物动画
大概想了一下整体的动画规划。
- 首先,整体上分为持枪动作和不持枪动作。
- 其次可以分别可以做出下蹲、站立、走路、小跑以及快跑和俯仰头。
- 其中除了快跑和站立和都可以做到八向移动。
- 最后添加换弹以及死亡动画。
其中俯仰头是通过记录鼠标 Y 轴后推算出俯仰角,再用分层骨骼混合节点实现俯仰头的效果。
人物动画逻辑
- 瞄准时跑步会关闭瞄准。
- 小跑时瞄准会切换为走路。
- 下蹲时跑步会关闭下蹲。
- 瞄准时跳跃会关闭瞄准。
- 射击时会限制人物移动速度。
以上逻辑均在人物蓝图中通过对速度的判断实时修改相关控制参数。
(概括一下就是下蹲、走路、瞄准和射击时最大移动速度为150,跑步时为600,平常为300。)
射击细节
主要是制作了射击时枪会偏移。
同时由于时第三人称,所以才瞄准时应该从枪口射出子弹,在非瞄准状态时由第三人称相机射出子弹。
训练营(靶场)
场景资源
单人交互
需要交互的主要是靶子和门。
- 靶子被击中后会倒下。
- 站在门前可以通过按键开关门。
其中通过在人物模型上添加重叠盒判断是否在开关门的范围内,而门的开关主要通过正反播放时间轴实现,因此可以实现开门瞬间再关门的操作。
多人交互
门
由于重叠盒的重叠判断是在服务器与客户端上共同运行的。
因此实现多人开门的交互,只需要将判断重叠盒是否重叠的参数和人物是否点击交互键的设置改为通知设置即可。
由服务器去实现功能逻辑。
靶子
欲实现多人交互的靶子击倒,得先将开火细节在服务器与客户端间共享(互相能看到开火)。
开火是在事件 tick 中调用的,所以只需保证 Server 和 Client 都能运行调用开火函数。
因此需要其相关参数在服务端与客户端需保证统一。
而类似于开火键等按键的输入函数均只在本机上运行,因此需要先自定义在服务器上运行的函数,再通过函数通知设置开火参数。
积分板
为了实现积分的统一,也需用在服务器上可靠运行的事件包裹相关函数。
同时为了不断地更新(其实主要在打开积分板的瞬间更新),需要从 PlayerController 中的 tick 调用相关事件。
之所以没有在打开计分板的瞬间更新函数也是因为,打开积分板的操作只在本地运行,所以对于客户端来说,打开积分板并不能调动服务器去更新相关参数。
当然也可以通过设计中间参数来实现,不过就略微有些麻烦了。
仓库
场景资源
用了 EPIC 本月免费资源( Storage House Set )。
AI
武器
种类
补了小刀和手雷,由于没有投掷动画,所以都只能用粒子特效和音效补偿。
手雷做了爆炸,所以给场景的一些组件添加了模拟物理。
特效
主要是将所有的 Actor 分成了三类, Pawn, Wood, Other ,分别有不同的打击声音和火焰。
动画细节
(有时间就做)。
脚步
安卓
基本就对着和平精英的操作 UI 做。
相关资源
百度网盘
提取码: 1111