Hit UFO 改进版
改进飞碟(Hit UFO)游戏:
- 游戏内容要求:
- 按 adapter模式 设计图修改飞碟游戏
- 使它同时支持物理运动与运动学(变换)运动
UML图及其分析
与原来相比,主要是ActionManager,这次为了使飞碟同时支持物理运动与运动学(变换)运动,所以实现了一个adpater,即通过IActionManager来支持多种动作。
实现adapter模式
实现adapter模式,重点就在于IActionManager,要控制飞碟同时进行物理运动和运动学运动。物理运动则主要是让飞碟具有刚体以及碰撞盒等部件,而运动学运动就是控制飞碟的一些简单的运动,transform的运动,实际上功能有重合。而为了让其同时进行工作,我让他们都继承于UFOFlyAction,不过一个是调用FixedUpdate(物理),一个调用Update。而IActionManager,则是一个接口,规定了动作管理器需要实现哪些功能。接下来展示一些关键代码,完整代码请看github
IActionManager:这里主要定义游戏需要的最重要的就是飞碟飞行的动作,还有游戏暂停与开始。接下来就可以在PhysicActionManager和FlyActionManager中实现它们。
public interface IActionManager
{
void Pause();
void Run();
void StartThrow(GameObject disk);
}
PhysicActionManager:这次我直接不用直接继承某个action,而是使用一个ActionFactory来生成各种需要的动作(由于物理动作与运动学动作可以同时实现,所以不需要分多个动作,ActionFactory只生产FlyAction),物理动作主要调用action的FixedUpdate,这里的实现方式我是参考自优秀博客的,我认为ActionFactory已经能够很好管理动作的生成与复用了,所以可以减少这里一些动作管理,仅仅是对一个动作的生命周期进行管理,需要时就调用,动作做完就通知ActionFactory回收。但由于调用Action又需要用一个队列管理,所以更改也遇到瓶颈。
public class PhysicActionManager : MonoBehaviour, IActionManager, ISSActionCallback
{
public