前言
这是中山大学软件工程学院2024年3D游戏编程与设计的第四次作业
所有项目与代码已上传至gitee当中,欢迎大家访问。
游戏演示URL:【unity打飞碟小游戏】 https://www.bilibili.com/video/BV1GpmoY3Ekf/?share_source=copy_web&vd_source=c8cc4eb9c40e046244693752c63e54f5
gitee代码URL: 打飞碟: unity打飞碟小游戏代码
游戏简介
某天你来到户外散步,突然发现有一把无限子弹的枪,和左右各一台持续运转的飞碟发射器,于是你选择?
游戏玩法
游戏界面两侧均会飞出飞碟,玩家需要用鼠标对飞碟进行点击,成功点击到飞碟视为击落,不同的飞碟击落后所获得的积分不同,蓝色一分,红色两分,黄色三分。
游戏时可以通过左侧按钮选择重新开始游戏,以及在普通难度和困难难度中进行切换,切换难度不会导致游戏重开,仍能继承之前的分数。
游戏UML图:
接下来会对针对每个类的代码进行讲解
控件组成:
游戏的主要功能通过左右各一个飞碟发射器,一个摄像机,UI控制的按钮,显示游戏开始倒计时和现实分数的文本框,用来加强玩家交互效果的步枪,以及用于存放被克隆出的飞碟以及粒子特效的两个置物袋。
代码逻辑
受制于创作时游戏窗口大小不同,具体的参数数值需要根据实际情况调整
Fire_logic:
(1)参数列表:
float speed:用来控制飞碟水平方向的飞行速度,垂直方向由刚体组件控制自由落体
float fire_interval:用来控制飞碟发射器的发射间隔
bool fire_on_left:用来描述飞碟发射器的位置,是位于屏幕左侧还是位于屏幕右侧
float fire_position:将fire_on_left转换为1或-1两个浮点数值,利于飞碟计算飞行方向
GameObject red_feidie:与下面两个GameObject一样,是三种颜色飞碟的预制体
GameObject blue_feidie
GameObject yellow_feidie
Transform feidie_package:飞碟的置物袋,所有克隆出的飞碟都会放在里面,减少对观感以及调试过程的影响。
(2)函数列表:
void Start():初始化发射器的位置参数,将发射速度设置为普通难度的数值。
void ReStart():游戏重新开始,先停止发射,在3秒后再开始新一轮游戏的发射。
void Fire():持续发射飞碟,并控制每个飞碟的飞行速度,并通过随机数来随机生成飞碟的高度,达到不会让所有飞碟都沿着相同的轨道运动的效果。
Feidie_Move
(1)参数列表
float speed:飞碟横向的飞行速度,由发射器为其赋值
float fire_position:飞碟飞行的方向,向左/向右(1/-1)
float point:击碎这个飞碟后会得多少分
GameObject Bomb:飞碟被击中后的爆炸粒子特效
Transform particle_package:粒子特效的置物袋,所有的爆炸粒子特效生成时都应作为它的子节点
(2)函数列表
void Start():找到粒子特效置物袋,准备放入。且为了防止未击中的飞盘累计过多,占用资源,在飞盘3秒未被击中时将其销毁。通过Invoke定时调用来模拟飞盘触地销毁的逻辑。
void Update():让飞盘持续向左或向右运动,再结合上飞盘组件的刚体组件(会做自由落体运动),能让飞盘以斜向下的弧线进行运动。
void Destroy():在销毁自己时,在原地创建一个爆炸的粒子特效
Main_logic
(1)参数列表
Camera cam:主摄像头,用于发出射线,检测鼠标点击是否击中飞碟
TextMeshPro time_text:现实倒计时的文本框
TextMeshPro points:显示当前得分的文本框
total_points:记录这一轮游戏的总得分
int time:用来进行游戏开始前的倒计时
(2)函数列表
void Start():调用Restart函数;
void ReStart():重置得分和倒计时
void ShowTime():在屏幕上显示游戏开始的倒计时,倒计时结束时隐藏文本框
void Update():获取鼠标点击事件,从摄像头向鼠标点击位置发射射线,被击中的物体就是被点击到的物体,如果被击中的是飞盘,就在记录加分后调用飞盘自己的自毁函数。
GUI_Control
(1)参数列表:以下三个参数的作用都是在重启游戏或修改难度时,调用其自身的重启函数或修改其中的参数。
GameObject fire_point_left
GameObject fire_point_right
public GameObject main_logic
(2)函数列表
void OnGUI():创建三个按钮,并为其各自绑定上对应的函数
void Restart():调用三个组件的ReStart函数
void Normal():调整发射器中发射出的飞碟的速度和发射间隔。
void Hard():调整发射器中发射出的飞碟的速度和发射间隔。
Destroy_logic
该脚本用于确保粒子特效能够成功自毁,如果在生命周期内没有自毁,就会在该脚本中调用自毁程序
Gun_logic
(1)参数列表
GameObject fire:存储枪口火焰的粒子特效
Camera cam:存储摄像机,用来改变枪的朝向,一直指向鼠标光标所在位置
Transform particle_package:粒子特效置物袋,存放枪口火粒子特效
float gun_fire_point:用来调整枪口火焰的位置,不同的枪的枪口距离枪体建模中心位置的距离不同,对不同的枪需要进行修改。
(2)函数列表
void Update():从摄像机向鼠标所在位置发出射线,距离发射点100m的位置视为目前枪应该朝向的方向。将枪旋转至朝向该方向。
如果接收到鼠标点击事件,就在枪口创建枪口火焰的粒子特效,并将其放在粒子特效置物袋中。