[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相关推荐

  1. 基于Unity的2D像素风闯关游戏Demo——SunnyLand

    文章目录 前言 一.制作画面截图 二.游戏实机画面 总结 前言 此Demo根据B站up@M_Studio的教程制作 一.制作画面截图 二.游戏实机画面 总结 这个Demo主要用于熟悉Unity引擎与运 ...

  2. 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述

    文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...

  3. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(小地图修改完善)

    目录 一.前言 二.小地图的制作 1.小地图制作 2.小地图美化 三.小地图展示主角移动和主角方向 四.小地图放大.缩小 五.大小地图 六.大地图显示主角移动和主角方向 一.前言 由于游戏设计,场景较 ...

  4. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(九——pun)

    目录 一.pun介绍 二.Appid配置 三.一些必须的代码 连接: 匹配 游戏 创建和加入游戏 回调函数 发消息 Photon视觉同步组件 观察Transform 观察MonoBehaviour 远 ...

  5. python大作业高分项目--射击闯关游戏

    项目功能: 地图编辑器:可以实现玩家自己定义每一关卡的样式和难易程度 运行界面:实现了玩家的移动,跳跃,发射子弹,投掷手雷,以及敌人的AL(移动,发射子弹,扔手雷),同时游戏中有一系列的道具(生命值药 ...

  6. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(八3、FPS——武器系统1)

    目录 一.前言 二.前期知识 三.武器系统的实现 枪械类 换弹Reload 添加开枪动画 子弹 具体枪械 制作装弹效果的动画 一.前言 武器系统的开发(枪械类.换弹操作.添加开枪动画.子弹.具体枪械. ...

  7. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(小地图工作前期知识:摄像机)

    目录 一.前言 二.透视(Perspective) 三.正交(Orthographic) 四.实际操作 五.遇到的问题 一.前言 使用相机制作小地图时,发现Unity的Camera的投影(Projec ...

  8. 项目实训- 基于unity的2D多人乱斗闯关游戏设计与开发(十1、FPS多人化——IK)

    目录 一.前言 二.前期知识 配置 三.使用IK控制武器 四.使用IK控制角色Aim 五.使用Photon同步IK约束 一.前言 需要制作枪口的同步,即枪口朝向的同步和枪械的绑定,这里使用IK 二.前 ...

  9. 基于C#+unity的2D跑酷闯关对战冒险游戏设计 课程报告+答辩PPT+源码

    目录 项目说明 1 1.1. 项目目标 1 1.2. 软硬件环境需求 2 1.3. 使用的关键技术 2 需求分析 2 2.1. 系统用例 2 2.2. 业务流程 3 概要设计 4 3.1. 功能模块设 ...

最新文章

  1. GOF23设计模式(结构型模式)代理模式~
  2. JavaScript系统对象
  3. RedHat Directory Server 8.2 Installation Guide
  4. qt槽函数如何传递多个参数_Qt:在发出信号后尝试将多个引用传递给槽函数
  5. 302 found是什么意思_犯罪大师心中的恶魔答案是什么 心中的恶魔答案真相分析...
  6. 关于如何破坏单例我说了好几种方式,面试官却说:我其实随便问问,没想到你真会...
  7. 阿里云建成全国最大数据中心集群 全面应用自研硬核技术
  8. c语言学习进阶-C语言带命令行参数的文件数据批量计算
  9. 对某产品政策性文件的解读
  10. 各种排序总结(五)快速排序
  11. 【王道计组笔记】总线(1):总线的概念和分类
  12. java三星题之_JAVA三星题之playing a TicTacToe game
  13. hsql mysql_HSQL简介
  14. http中长连接与短连接的区别,和实现方式。
  15. abb机器人指令手册_ABB机器人制动闸未释放故障维修
  16. axf下不了 keil5jlink_keil无法生成axf文件之解决方法
  17. HCNP学习笔记之OSPF协议原理及配置1-基础知识
  18. 进销存设计与分析_库存汇总表(13)
  19. c++运算符优先级归纳
  20. 美国全国就业普遍低迷“技术”就业却加速增长;爱立信发布2030年10大消费者趋势 | 美通社头条...

热门文章

  1. Windows 下npm升级方法
  2. log4j 的additivity属性
  3. 赶集网模拟登陆程序PHP
  4. Excel截取两个相同字符前中后字符串
  5. linux系统串口透传,基于CC2540的USB虚拟串口透传方案
  6. 开启10046事件的方法收集
  7. OpenStack之Glance
  8. C++Student类
  9. 三层架构之UI层完全分离
  10. 织梦php源码,织梦 | php教程|php源码|php学习