# 求职demo-简单的太空游戏 **Repository Path**: lvici244263/job-demo---simple-space-game ## Basic Information - **Project Name**: 求职demo-简单的太空游戏 - **Description**: 此项目为本人与大三下学期利用课余时间独立开发的简单太空飞船游戏框架的小demo,目前还在开发中。整个项目架构设计参考了《游戏设计模式》。除天空盒子为免费素材外,所有素材均为本人自己设计与制作。同时,shader部分也结合使用了CG语言和HLSL语言,实现了简单的护盾效果。渲染管线使用的是Unity内置的Build-In渲染管线,但实现了诸如动态模糊、泛光等后处理效果,也达到了一个不错的视觉效果。 - **Primary Language**: C# - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 0 - **Created**: 2023-05-25 - **Last Updated**: 2023-05-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 关于本项目 本项目为本人为准备暑期实习与秋招而利用课余时间开发的求职demo。供展示、交流以及学习。使用的Unity版本为:2021.3.10f1c2 ## 设计模式 ### 命令模式 对船体操控的框架使用的是命令模式设计的思路,将行为和对象本身分离开来,用户的输入是通过PlayerBehaviorManager这个脚本实现,将用户的所有输入都储存在set中作为命令流,实现同一帧执行多个输入命令的功能。而船体行为具体逻辑则由BaseBehaviour统一管理,无论是玩家输入还是后续添加的AI,无需关心命令输入者到底是谁,只需要根据命令流执行即可。最终实现的效果类似于Unity官方推出的InputSystem。 ### 观察者模式 基于C#中的Event,创建一个静态类EventHandler作为信息中心,当两个对象之间要通信时,使用这种方式可以达到降低耦合的效果而且同时在一对多的通信中也会非常常用。 ### 工厂模式 工厂模式在本项目里主要被应用在了针对各种命令的生成上,所有命令都继承自一个命令接口,而这些命令在初始化时,将其全部都放在工厂类中集中生成。 ## 项目优化 ### ComputeShader 为了实现船体尾焰的效果,需要使用粒子系统,而Unity内置的粒子系统是基于CPU计算的,同一时刻只能模拟几百几千个粒子还会对CPU造成较大压力,所以这里采用了基于Unity ComputeShader实现的简单粒子系统,将粒子的各种行为的计算都交给了GPU完成,计算能力强的同时还是并行计算,获得了较高的性能,可支持几万、几十万甚至上百万个粒子的模拟。 ### LOD技术 在编写shader时考虑到性能方面的问题,使用LOD技术可以有效降低渲染的压力。让远处的模型以一个更少的面的形式被渲染。 ### 画面效果优化 由于shader部分使用到了多Pass渲染、CG语言和HLSL语言等均有涉及而且结合使用,使得将编写好的shader由内置渲染管线转到URP或者HDRP都较为困难,所以为了达到一个较好的画面效果,后处理是必不可少的。本项目目前实现了基于高斯模糊的泛光效果和动态模糊效果,同时还通过噪声实现了一个简单的护盾的动态、溶解、生成等效果。而且护盾是可互动的,在被子弹攻击时,被攻击位置会显示为红色。 ## 其它功能 本项目有许多本人玩过的各种游戏的实现效果与运行逻辑的影子。比如舰船移动的效果参考《家园》与《星际争端》中大型舰船的移动方式,速度控制与MainBattery旋转瞄准逻辑控制则参考《战舰世界》。同时,还实现了带有追踪效果的Missle,可以自动瞄准、无需玩家手动操作的小型自动Battery。 而且,项目的大部分数据都使用了SO进行储存,所以要设置新的Battery/Missle属性是十分方便的,我们只需要在Assets中指定各种参数,然后将脚本中的ID设置与之相对应即可。 ## 未来计划功能 - 基于有限状态机制作AI敌人运行脚本。 - 开火特效,由于涉及到的粒子不多,计划使用Unity内置粒子系统 - 小飞机,还在构想,是使用实时弹道还是使用概率命中还在斟酌。实时弹道则涉及到预测飞机的位置,计算不困难,但真正实现在代码里感觉又要掉好多头发。 - UI显示,2D不太会,鸽了好久 - 舰船生命、护盾生命等逻辑,计划使用上述的观察者模式实现。