[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秒后若没有销毁则自动销毁,若碰撞到幽灵,对幽灵造成伤害,其他碰撞销毁自己

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值