HW5:游戏世界中的交互

作业要求:
1. 编写一个简单的自定义 Component
 用自定义组件定义几种飞碟,做成预制
• 参考官方手册 https://docs.unity3d.com/ScriptReference/Editor.html
• 实现自定义组件,编辑并赋予飞碟一些属性
2、编写一个简单的鼠标打飞碟游戏【 选做
 游戏内容要求:
• 游戏有多个轮次,每个轮次都包括10个轨迹;
• 每个轨迹的飞碟的色彩、大小、发射位置、速度、角度、同时出现的
个数都可能不同。它们由该轮次的 ruler 控制;
• 每个轨迹的飞碟有随机性,总体难度随轮次上升;
• 鼠标点中得分,计分规则按色彩、大小、速度不同计算,可自由设定
 游戏的要求:
• 使用带缓存的工厂模式管理不同飞碟的生产与回收,该工厂必须是场
景单实例的!具体实现见参考资源 Singleton 模板类
• 近可能使用前面 MVC 结构实现人机交互与游戏模型分离
一、飞碟预制
创建DiskData类,存储飞碟的一些基本属性。
将DiskData.cs挂载在飞碟的预制上,结果如下:
在此可以编辑修改飞碟的一些属性。

最终效果图:
二、鼠标打飞碟游戏
首先是实现用工厂模式管理不同飞碟的生产与回收。
实现了函数 GetDisk,控制器通过把当前关卡传给这个函数并带有随机性质地返回相应的飞碟,如果空闲列表中存在有飞碟则取空闲列表中的,否则将从预制件中实例化一个新的飞碟并返回。

 

当飞碟完成操作(被击落或是飞出屏幕)后需要回收飞碟:

本次实践实现了飞碟模型与动作的分离,与上一次实践类似,只需要继承实现好的三个类:SSAction,SSActionManager,SequenceAction即动作类,动作管理器类,以及对于连续动作序列的类。

对于动作类,需要实现UFO飞行的动作逻辑。我实现的是UFO将从屏幕的左边或右边飞出,在重力作用下和给定角度下做斜抛运动。在生产UFO时已经随机得到了UFO是从左边还是右边飞出以及其初始的纵坐标,我们可以简单得到其运动的起始速度向量以及运动过程中的速度。

 对于动作管理类,只需要简单建立起动作和管理器之间的联系并作为中间人调用动作类即可。

本实践事实上不需要实现动作序列,因为动作类足以描述飞碟运动全过程。

然后是全局控制器类

首先实现了Start函数,定义了计分规则,实例化了相关联的类。

 其中,disk_factoryscore_recorder即飞碟工厂和计分员都是单实例的,根据Singleton模板类实现。

然后是Update函数,它根据当前游戏的情况来确定使用飞碟的逻辑:

其中的 LoadResources函数实现了访问工厂使用飞碟:
其中的 SendDisk函数将从工厂获得的飞碟经过处理(随机地给飞碟力与角度使其能实现斜抛运动)传递给动作管理器类实现飞碟运动,并对飞碟飞出后的情况(被击落或是飞出屏幕)进行处理。
需要实现击落飞碟的逻辑,通过GUI类接受 Fire1(默认为单击鼠标左键)来访问控制器实现对飞碟的打击,记录下点击的射线然后进行判断,如果击中了则实现记分员记分,飞碟爆炸,回收飞碟逻辑。
运行演示效果如下:  

猜你喜欢

转载自blog.csdn.net/weixin_40552127/article/details/128163465
今日推荐