Unity3D——Hit UFO

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32335095/article/details/79968860

编写一个简单的鼠标打飞碟(Hit UFO)游戏

  • 游戏内容要求:
    1. 游戏有 n 个 round,每个 round 都包括10 次 trial;
    2. 每个 trial 的飞碟的色彩、大小、发射位置、速度、角度、同时出现的个数都可能不同。它们由该 round 的 ruler 控制;
    3. 每个 trial 的飞碟有随机性,总体难度随 round 上升;
    4. 鼠标点中得分,得分规则按色彩、大小、速度不同计算,规则可自由设定。
  • 游戏的要求:
    • 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场景单实例的!具体实现见参考资源 Singleton 模板类
    • 尽可能使用前面 MVC 结构实现人机交互与游戏模型分离

我的游戏

游戏视频链接:密码:1111

游戏规则:

  1. 点击start按钮开始游戏,鼠标点中飞碟得分
  2. 每个飞碟的色彩、发射位置随机,由round的rules规定
  3. 每一轮飞碟飞行速度逐渐增加(难度增加),击打所对应的分值也相应增加
  4. 每一轮包括10个飞碟,飞碟全部发射完毕,无条件进入下一轮
  5. 点击restart按钮清空分数和关卡记录,从第一关开始

游戏截图:
这里写图片描述

这里写图片描述

这里写图片描述
实现思路:
这里写图片描述
按照课件的UML图进行游戏设计。

  • 制作飞碟的预制,我用的是cylinder,因此如果将localscale和rule关联,就可能出现不像飞盘(飞碟)的情况。于是手动指定scale,分别是3, 0.3, 2
  • 利用单例模式进行类间通信,如
        Singleton<DiskFactory>.Instance.FreeDisk(disk);
        factory = Singleton<DiskFactory>.Instance;
        recorder = Singleton<ScoreRecorder>.Instance;
  • 分别实现RoundController、DiskFactory、ScoreRecorder,挂在主摄像机上即可
  • 交互使用UserGUI,同上次作业一样

*具体实现代码有参考Unity学习笔记(九)——简单打飞碟游戏 & 改进

一些bug或困难记录

1.是OnGUI而不是onGUI。这个在score显示的时候卡了很久,查了一下GUI不显示Texture的方法,一一实践发现并不能够解决。用debug输出信息发现居然没有调用这个函数,仔细一看打错函数名了…(虽然是我粗心写错但还是附上一个链接方便以后查看:关于unity中GUITEXT出现不显示问题

2.关于飞盘的样式:一开始的确想让它们每一关长得不一样,但是考虑到飞盘大概都长得差不多,干脆统一定制(只针对形状),否则看起来就不像飞盘了。

3.关于起止位置:最开始是想让飞盘往游戏者这边飞,而不是像查到的一些实现一样往远处走。但是实际操作了一下存在问题,一个是如果定义vector3.z太小,会在界面上出现【等待飞出的飞盘】,毕竟随机也是要有指定位置的。但如果定义得太大,远是远了,可以达到“看不见”的效果,但是考虑到实际情况,模拟真正的飞盘飞出,重力加速度会让飞盘无法坚持,在还未来到游戏者面前就已经掉落。

4.关于public和private的选择::脚本中定义的public变量在 inspection中是可以手动修改的,一开始没想那么多全部都设成public(一个很坏的习惯),然后就出现round随意改、score随意改等等不符合游戏规则的“bug”于是决定只把每轮的飞碟数设成public,这个可以让玩家修改,一轮要扔出多少个飞碟。

5.关于游戏规则:最初的想法是设定一个阈值,每一关要大于某个值才能进入到下一关,否则游戏失败游戏结束。但是遇到了一点问题,比如:

 if (GUI.Button(new Rect(width + 110, height, 50, 30), "start"){
 this.nextRound();
}

我的想法是嵌套if

if(score>x)
this.nextRound();
else {
GUI.TextArea(new Rect(width + 300, height + 200, 100, 30), "Game Over!");
}

但是不知道为什么,它不会进入到else语句(用debug测试过了)
时间比较紧,这个问题没有得到解决….以后有时间再弄吧


有用的链接:

Unity知识一:简单的点击事件
Unity3d与设计模式(三)工厂模式
https://www.cnblogs.com/flyFreeZn/p/4026026.html

阅读更多

没有更多推荐了,返回首页