1. 程式人生 > >FSM有限狀態機學習

FSM有限狀態機學習

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FSMSystem {
    public FSMState currentState;
    private Dictionary<StateId, FSMState> dic;
    public FSMSystem()
    {
        dic=new Dictionary<StateId,FSMState>();
    }
    public void AddState(FSMState state)
    {
        if(state==null)
        {
            Debug.LogError("The state is null");
            return;
        }
        if(dic.ContainsKey(state.ID))
        {
            Debug.LogError("The state is exist");
            return;
        }
        dic.Add(state.ID, state);
    }
    public void DeleteState(StateId id)
    {
        if (id == StateId.NullStateId)
        {
            Debug.LogError("The state you want to delete is null."); return;
        }
        if (!dic.ContainsKey(id))
        {
            Debug.LogError("The state " + id + " you want to delete is not exit."); return;
        }
        dic.Remove(id);
    }
    public void TranslateState(Transtition trans)
    {
        if(trans==Transtition.NullTranstition)
        {
            Debug.LogError("The Transtition is null");
            return;
        }
        StateId id = currentState.GetNextStateID(trans);
        if(id==default(StateId))
        {
            Debug.LogError("Current state is not exist Transtition");
            return;
        }
        FSMState fs;
        if (dic.TryGetValue(id, out fs))
        {
            currentState.BeforeLeaveState();
            currentState = fs;
            currentState.BeforeEnterState();
        }
        else
        {
            Debug.LogError("The FsmSystem is not contain the FsmState.");
            return;
        }        
    }
    public void Start(StateId id)
    {
        FSMState state;
        bool isGet = dic.TryGetValue(id, out state);
        if (isGet)
        {
            state.BeforeEnterState();
            currentState = state;
        }
        else
        {
            Debug.LogError("The state " + id + " is not exit in the fsm.");
        }
    }
    public void DOUpDate()
    {
        Transtition trans=currentState.CheckTranstition();
        if (trans != Transtition.NullTranstition)
            TranslateState(trans);
        currentState.DoUpdate();
    }
}
程式碼很簡單,理清思路後沒有什麼難理解。

相關推薦

FSM有限狀態學習

using System.Collections; using System.Collections.Generic; using UnityEngine; public class FSMSystem { public FSMState currentState; private Dict

FSM有限狀態學習及Unity3D案例講解

引言:近日忙於畢業論文,今天看到漲了3個粉絲,不甚驚喜。遂今日更新FSM有限狀態機學習,希望大家共同進步! 開發版本:Unity 2017.1.1f1、VS 2017 適合人群:初學Unity者 一.有限狀態機定義 有限狀態機(英文:Finite State Mach

學習筆記(三) 簡單的狀態模式&FSM有限狀態框架的實現(二)

之前釋出的那篇部落格可能說的並是不非常清楚,所以整理了一下,也參考了一些文件,於是又寫了一篇總結。 一、有限狀態機FSM的要點 1、擁有一組狀態,並且可以再這組狀態之間進行切換。 2、狀態機同時只能存在一個狀態,英雄不能能同時處於跳躍和站立。而防止這一點就是使用

FSM有限狀態

1、什麼是有限狀態機 有限狀態機(Finite State Machine),簡稱FSM,它由一組有限個狀態、輸入和根據輸入及現有狀態轉換為下一個狀態的轉換函式組成,當然,通常每個狀態機都必須有一個初始狀態。它有兩個重要的概念:狀態和轉移。有限狀態機在很多領域都有運用,這裡介紹的是在unity遊戲開發中

Unity--FSM有限狀態

有限狀態機,先理解是幹什麼的,有限表示這個是有限度的不是無限的,狀態,指的是所擁有的所有狀態,這麼來理解,人有情緒,比如說生氣,無感,喜悅,難過,生氣,幸福等,那麼這些情緒是固有的幾種,是所謂有限,那麼那些情緒就是不同的狀態,人可以在這些狀態之中進行轉換,此時是開心的,下一

在Unity中實現FSM有限狀態

簡介 有限狀態機,(英語:Finite-state machine, FSM),又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型 -- 引用百度百科的解釋: 有限狀態機(FSM)是遊戲AI的一種常用模型,我做一個簡單的

FSM有限狀態架構

      首先我們應該定義一個狀態基類FSMBase,裡面有一些動畫狀態的基本行為,比如動畫狀態的進入,持續,離開等,然後因為人物並不是只有一個狀態,所以我們應該建立一個狀態管理器來管理狀態,裡面應該定義一些方法,比如我們應該定義一些狀態的共同邏輯,比如對狀態進行儲存,新增

FPGA學習筆記(七)——FSM(Finite State Machine,有限狀態)設計

fault mil 系統 time 編碼 代碼 ril esc 寫法   FPGA設計中,最重要的設計思想就是狀態機的設計思想!狀態機的本質就是對具有邏輯順序和時序規律的事件的一種描述方法,它有三個要素:狀態、輸入、輸出:狀態也叫做狀態變量(比如可以用電機的不同轉速作為狀態

Unity3D有限狀態FSM學習筆記【7】使用例項

using UnityEngine; using System.Collections; public class TestUIState : MonoBehaviour { public static EventSystem.Dispatcher Events = new EventSystem.Di

Unity3D有限狀態FSM學習筆記【3】FSState類

本系列筆記轉載自遊戲蠻牛專欄作家Jackel的論壇文章,詳細介紹了FSM的建立與使用,特與眾分享。連結:http://www.manew.com/thread-37136-1-1.html 該類主要是狀態的基本操作及事件的新增與觸發。程式碼如下: using System;

關於FSM有限狀態)的學習2

以下內容參照《unity3d 人工智慧程式設計》--Aung Sithu Kyaw,Clifford Peters ,Thet Naing Swe編著</span> 最近在研究此書,花費幾天時間,略有收穫,所以寫下此編文章,計劃是3章,這是第一章,受個人能力限

獨立項目-角色控制器-有限狀態FSM

技術分享 OS pos .com com 過渡 動畫過渡 unity 狀態機   學習內容:     Unity5的新動畫系統       1.動畫導入 分動畫       2.創建動畫狀態機       3.設置動畫過渡 設置動畫跳轉條件       4.動畫重定向 獨立

go - FSM有限狀態)初體驗

層次 time lba 當前 時機 警告 pen nil 自定義 FSM有限狀態機 /** * @Author: wsp * @Time : 2018/4/11 16:45 * @Description: */ package fsmStrudy import

有限狀態FSM)的設計

有限狀態機(FSM)的設計_zhangxianhe  有限狀態機(FSM)是一種常見的電路,由時序電路和組合電路組成。  設計有限狀態機的第一步是確定採用Moore 狀態機還是採用Mealy 狀態機。 Mealy 型:狀態的轉變不僅和當前狀態有關,而且跟各輸入訊號有關; Moo

有限狀態FSM)寫法的個人總結(一段式,二段式,三段式)

      狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行狀態轉移,每個狀態的輸出是什麼,狀態轉移的條件等。具體描述時方法各種各樣,最常見的有三種描述方式:      (1)一段式:整個狀態機寫到一個always模組裡面,在該模組中既描述狀態轉移,又描述狀態的輸入

有限狀態FSM)讀書筆記

有限狀態機(Finite-state machine)又稱有限狀態自動機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。 有限狀態機FSM的實現 1.用而(開關/箱)或(如果/其他)實現簡單粗暴,適合簡單的小型狀態機; 2.用設計模式中的state pattern,把複

FSM:網路遊戲開發中的有限狀態(實踐篇)

上一篇文章《FSM:網路遊戲開發中的有限狀態機(理論篇)》中,講解了FSM的基礎知識。這裡,我結合圖形及具體例子,講解下FSM在實際開發中的運用。首先,圖解下上篇文章中提到的各種action。1.InputAction:某狀態下收到某事件,輸出相應動作。這裡不發生狀態變更,只

使用有限狀態FSM)解釋shell 命令

一、有限狀態機(Finite State Machine,FSM)是表示有限個狀態及在這些狀態之間的轉移和動作等行為的數學模型,在計算機領域有著廣泛的應用。FSM一個常見的應用就是用來負責Parser複雜的資料結構,比如解釋URI協議(uri-rfc239、ur

FPGA--有限狀態(FSM)的設計

學習有限狀態機(FSM)的設計 什麼是狀態機?簡單來說,就是通過不同的狀態遷移來完成一些特定的順序邏輯。 FSM定義: 一個有限狀態機是一個裝置,或者是一個裝置模型,具有有限數量的狀態,它可以在任何給定的時間根據輸入進行操作,使得一個狀態變換到另一個

Unity 內的敵人AI 或者 有限狀態FSM實現AI

孫廣東  2015.8.15一、Enemy Aim Ai           目的: 這篇文章的主要目的是為了讓您瞭解有關如何使用 Enemy Aim Ai 。你會得到結果:          Enemy aim AI是非常有用的,當你想要敵人一直監視player。適當爭取物