[Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
[Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
一个简单的单机闯关小游戏,主角到达终点即为胜利,关卡中有两种怪物能够对主角造成伤害,此外还有灯、陷阱、宝箱等场景互动要素,主角从宝箱中获得枪后能够进行射击杀死怪物
游戏逻辑简述
主角
初始有三点血量,被怪物攻击或触发陷阱回收到伤害,血量为零时进行副本结算,成功到达终点后游戏胜利
当获得武器后可以发射子弹,子弹会沿直线飞行,碰到障碍物、怪物、墙壁后,子弹消失
怪物
石像鬼
无法移动,血量无限,攻击到主角会直接将主角杀死
AI:来回探照,探照到主角后将主角杀死
幽灵
初始九点血量,当被子弹攻击后根据角色攻击力扣除血量,血量为0后死亡,3秒后出生点符火
AI:出生后在一定范围内巡逻,被攻击后会追逐主角直到死亡
场景互动物体
灯光
灯每15秒自动亮一次,亮10秒钟自动熄灭,灯亮起时,灯光范围内的怪物死亡
主角操作开关改变当前房间灯的状态(关-》开,开-》关),状态改变后场景机制的灯重新计时。
减速陷阱
主角触发陷阱后会减少主角50%移动速度,主角离开陷阱后依然会持续5秒减速效果。
地刺陷阱
每间隔3秒会伸出尖刺,持续3秒,尖刺缩回,重新开始计时。当尖刺处于伸出状态时,主角在陷阱范围,每秒会受到1点伤害。
宝箱
打开宝箱后主角可以获得一把武器
实现简述
由于实现功能较为简单,因此只简述实现思路
类组织结构
使用彩色建模的思想组织类结构,类图:
SceneObject
所有场景物体包括主角、怪物、互动物体等的抽象基类,仅有init()
抽象方法
Character
拥有血量和攻击力的实体继承自Character,同时实现getATK()
和beDamage()
抽象方法用于处理攻击和受击逻辑
SceneItem
其他场景实体继承自SceneItem,无特殊属性和方法
Scene
场景管理类,能偶根据Json文件生成场景物体,保存了实体预制体,还拥有一个静态List和静态方法用于运行时向场景中添加新实体
InteractionMI
用于处理单个实体无法处理或不属于单个实体的逻辑,包括:
- 幽灵追踪主角时获取角色位置
- 帮助实体初始化定时器组件
- 减速陷阱是否可以回复主角速度
- 主角与灯、宝箱、武器的交互
DamageMI
包含静态方法Damage()
专门用于处理伤害逻辑,方便后续服务器验证等逻辑
逻辑实现
主角
Protagonist类用于处理主角相关逻辑
受击逻辑
当主角不处于无敌状态,播放受击动画,扣除血量并进入无敌状态,定时器定时一秒后关闭无敌状态
交互逻辑
用户输入交互信号后,交由InteractionMI判断交互是否成功,返回交互信息,主角播放对应动画
武器逻辑
当主角获得武器后,主角身上保存武器的引用,与武器交互直接调用武器的对应方法(Drop()
,Fire
())
结算逻辑
当主角HP小于等于0时,调用Scene的静态方法,请求场景结算
怪物
石像鬼
血量无限,没有受击逻辑,当检测组件检测到主角时,调用继承的Attack方法,攻击主角
幽灵
三种状态:die、patrol,chase
死亡状态下三秒后会在第一个导航点复活
巡逻状态下检测到主角会调用继承的Attack方法攻击主角
追逐状态下会每帧获得主角位置追逐主角
其他场景物品
灯光
初始化时添加计时器用于控制自动开关,用户交互后重置计时器
开启时使用一个锥形的检测器检测幽灵是否在范围内,如果在调用Damage对幽灵造成伤害
存在一个Box Collider,当玩家进入时,调用InteractionMI的方法,将InteractionMI保存的静态SwitchableLight
引用置为自己,当玩家交互时这个引用不为null,则调用这个引用的SwitchableLight的ChangeLight
方法完成开关灯的交互
减速陷阱
当玩家进入时,调用InteractionMI的方法,使其内置的静态_slowDownCount
计数加一,并调用玩家的SetSpeedRatio
方法使玩家减速
当玩家离开,设置计时器5秒后调用InteractionMI的方法,使其内置的静态_slowDownCount
计数减一,当计数为零时才可以调用玩家的SetSpeedRatio
方法使玩家回复正常速度
地刺陷阱
初始化时设置计时器,每三秒改变一次状态,当玩家进入,设置计时器每一秒对玩家造成一次伤害,当玩家离开,取消计时器
宝箱
内置public GameObject GWeapon;
用于保存要生成的枪的预制体
当玩家第一次与宝箱交互,播放开宝箱动画,设置计时器1.2秒后根据预制体克隆一个武器,并将武器通过Scene的静态方法加入到Scene维护的SceneObject列表中,自身保存新生成的武器的引用
当武器生成后玩家再与宝箱交互则通过InteractionMI的方法将武器父节点设为玩家,玩家获得武器的引用,自身武器引用置为null
武器
内置private Transform _parent = null;
用于保存父物体
Drop方法被调用时,若父物体不为空,设置自身刚体属性,设置速度使武器有抛出效果,设置计时器1秒后恢复到没有物理效果的状态,父物体置为空
Fire方法被调用,若能够开火,则生成并初始化一个子弹,生成时将保存的父物体的Transform给子弹,保证子弹能够向角色前方发射,开火后设置开火状态为不能开火,设置计时器0.5秒后恢复开火状态
当父物体信息为空,与其他交互逻辑类似,通过InteractionMI完成武器捡起的交互逻辑
子弹
初始化时设置初速度,启动定时器1秒后若没有销毁则自动销毁,若碰撞到幽灵,对幽灵造成伤害,其他碰撞销毁自己
[Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo相关推荐
- 基于Unity的2D像素风闯关游戏Demo——SunnyLand
文章目录 前言 一.制作画面截图 二.游戏实机画面 总结 前言 此Demo根据B站up@M_Studio的教程制作 一.制作画面截图 二.游戏实机画面 总结 这个Demo主要用于熟悉Unity引擎与运 ...
- 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述
文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(小地图修改完善)
目录 一.前言 二.小地图的制作 1.小地图制作 2.小地图美化 三.小地图展示主角移动和主角方向 四.小地图放大.缩小 五.大小地图 六.大地图显示主角移动和主角方向 一.前言 由于游戏设计,场景较 ...
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(九——pun)
目录 一.pun介绍 二.Appid配置 三.一些必须的代码 连接: 匹配 游戏 创建和加入游戏 回调函数 发消息 Photon视觉同步组件 观察Transform 观察MonoBehaviour 远 ...
- python大作业高分项目--射击闯关游戏
项目功能: 地图编辑器:可以实现玩家自己定义每一关卡的样式和难易程度 运行界面:实现了玩家的移动,跳跃,发射子弹,投掷手雷,以及敌人的AL(移动,发射子弹,扔手雷),同时游戏中有一系列的道具(生命值药 ...
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(八3、FPS——武器系统1)
目录 一.前言 二.前期知识 三.武器系统的实现 枪械类 换弹Reload 添加开枪动画 子弹 具体枪械 制作装弹效果的动画 一.前言 武器系统的开发(枪械类.换弹操作.添加开枪动画.子弹.具体枪械. ...
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(小地图工作前期知识:摄像机)
目录 一.前言 二.透视(Perspective) 三.正交(Orthographic) 四.实际操作 五.遇到的问题 一.前言 使用相机制作小地图时,发现Unity的Camera的投影(Projec ...
- 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(十1、FPS多人化——IK)
目录 一.前言 二.前期知识 配置 三.使用IK控制武器 四.使用IK控制角色Aim 五.使用Photon同步IK约束 一.前言 需要制作枪口的同步,即枪口朝向的同步和枪械的绑定,这里使用IK 二.前 ...
- 基于C#+unity的2D跑酷闯关对战冒险游戏设计 课程报告+答辩PPT+源码
目录 项目说明 1 1.1. 项目目标 1 1.2. 软硬件环境需求 2 1.3. 使用的关键技术 2 需求分析 2 2.1. 系统用例 2 2.2. 业务流程 3 概要设计 4 3.1. 功能模块设 ...
最新文章
- GOF23设计模式(结构型模式)代理模式~
- JavaScript系统对象
- RedHat Directory Server 8.2 Installation Guide
- qt槽函数如何传递多个参数_Qt:在发出信号后尝试将多个引用传递给槽函数
- 302 found是什么意思_犯罪大师心中的恶魔答案是什么 心中的恶魔答案真相分析...
- 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...
- 阿里云建成全国最大数据中心集群 全面应用自研硬核技术
- c语言学习进阶-C语言带命令行参数的文件数据批量计算
- 对某产品政策性文件的解读
- 各种排序总结(五)快速排序
- 【王道计组笔记】总线(1):总线的概念和分类
- java三星题之_JAVA三星题之playing a TicTacToe game
- hsql mysql_HSQL简介
- http中长连接与短连接的区别,和实现方式。
- abb机器人指令手册_ABB机器人制动闸未释放故障维修
- axf下不了 keil5jlink_keil无法生成axf文件之解决方法
- HCNP学习笔记之OSPF协议原理及配置1-基础知识
- 进销存设计与分析_库存汇总表(13)
- c++运算符优先级归纳
- 美国全国就业普遍低迷“技术”就业却加速增长;爱立信发布2030年10大消费者趋势 | 美通社头条...