Unity3d入门之路-牧师与魔鬼 动作分离版

牧师与魔鬼 动作分离版

  • 【2019新要求】:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束

实现过程

什么是动作分离版呢?还记得我们上个版本的牧师与魔鬼为了实现character与boat的移动,实现了一个Moveable的脚本,并把此脚本作为组件加到character与boat上了。然而这样的实现方法是不完全符合MVC的分离的,动作的控制应该交由Control模块管理,而不是在Model模块中。所以这次为了实现动作分离版,我们实现一个Action模块,专门管理Model的动作,实际使用上与Moveable差别不大。为了有个更清晰的理解,先来看一下UML图
在这里插入图片描述

Action模块
  1. ISSActionCallback(动作事件接口)
    这是一个接口,用以实现callback。也就是当某个动作完成之后,使用callback回调到调用此函数的类中实现的此接口的函数,如SSActionEvent中。
public enum SSActionEventType : int { Started, Competeted }

public interface ISSActionCallback
{
    void SSActionEvent(SSAction source, SSActionEventType events = SSActionEventType.Competeted,
        int intParam = 0, string strParam = null, Object objectParam = null);
}
  1. SSAction (动作基类)
    这是所有动作的基类,所有动作继承该类以实现各种动作以及组合动作。ScriptableObject 是不需要绑定 GameObject 对象的可编程基类,这些对象受 Unity 引擎场景管理。这个类更关键的是利用接口(ISSACtionCallback)实现消息通知,避免了与动作管理者直接依赖。
public class SSAction : ScriptableObject            //动作
{

    public bool enable = true;                      //是否正在进行此动作
    public bool destroy = false;                    //是否需要被销毁

    public GameObject gameobject { get; set; }                  //动作对象
    public Transform transform { get; set; }                     //动作对象的transform
    public ISSActionCallback callback { get; set; }              //回调函数

    protected SSAction() { }                        //保证SSAction不会被new

    public virtual void Start()                    //子类可以使用这两个函数
    {
        throw new System.NotImplementedException();
    }

    public virtual void Update()
    {
        throw new System.NotImplementedException();
    }
}
  1. SequenceAction(组合动作实现)
    该类继承了SSAction类,实现多个单动作的组合成一个动作,组合动作同时也是一个动作。该类利用一个List管理多个动作,并在接口方法中实现了动作的执行顺序。
public class SequenceA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值