GDGeek使用概要

1855 ワード

FSM(有限状態機)
GDGeekのFSMは階層型ステートマシンを実現し、タスク(Task)と補間アニメーション(Tween)を統合して使いやすい.
        fsm_ = new FSM();

        //    
        fsm_.addState("start", startState());
        fsm_.addState("play", playState());

        //  play      
        fsm_.addState("input", inputState(),"play");
        fsm_.addState("fall", fallState(), "play");
        fsm_.addState("remove", removeState(), "play");

        fsm_.addState("end", endState());

        //    
        fsm_.init("play");

各状態の実装関数は1つのStateを返さなければならない
    private State playState()
    {
        StateWithEventMap state = new StateWithEventMap();

        state.onStart += delegate()//    
        {
            view.play.gameObject.SetActive(true);
            refreshView();
        };

        state.onOver += delegate()//    
        {
            view.play.gameObject.SetActive(false);
        };
        return state;
    }

FSM送受信メッセージ送信fsm_.post(msg);受信state.addAction(msg, delegate(FSMEvent evt) { return "fall";});メッセージは状態で受信されるので、同じメッセージは異なる状態で異なる処理を行うことができる.コールバックの処理で次の状態に戻ります.
タスクシステム(Task)
        StateWithEventMap state = TaskState.Create(delegate()
        {
            TweenTask tt = new TweenTask(delegate   //    
            {
                return TweenLocalPosition.Begin(_tempSquare.gameObject, 1f, _targetSquare.transform.localPosition);
            });
            TaskManager.PushBack(tt, delegate
            {
                _tempSquare.hide();
                refreshView();
            });
            return tt;
        }, fsm_, "remove");//     

複数のアニメーションが同時に実行されている場合は、タスクをTaskSetに挿入し、すべてのタスクを同時に実行し、すべてのタスクが完了した後に次のステータスに切り替えます.