Unity3d实现有限状态机系统

原文地址:blog.liujunliang.com.cn

在之前有过介绍一个可视化有限状态机编辑器插件PlayerMaker

在这里也可以在我们的代码中实现一个状态机

本文源码地址:点击打开链接

首先创建一个脚本,来管理我们的各个状态

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

/// <summary>
/// 状态ID
/// </summary>
public enum FSMStateID
{
    NullFSMStateID,
    PatrolFSMStateID,//巡逻状态
    ChaseFSMStateID,//追逐状态
}


/// <summary>
/// 状态转化条件
/// </summary>
public enum FSMTransition
{
    SeePlayer,//看到主角(目标)
    LeavePlayer,//远离敌人(目标)
}

public class FSMSystem
{
    private FSMStateID mCurrentStateID;
    private FSMBaseState mCurrentState;

    private Dictionary<FSMStateID, FSMBaseState> mFSMStateDic = new Dictionary<FSMStateID, FSMBaseState>();


    public void AddFSMSate(FSMBaseState state)
    {
        if (state == null)
        {
            Debug.Log("角色状态为空,无法添加");
            return;
        }
        if (mCurrentState == null)
        {
            //第一个添加的状态被作为系统首个运行的状态
            mCurrentStateID = state.mStateID;
            mCurrentState = state;
            mCurrentState.StateStart();
        }
        if (mFSMStateDic.ContainsValue(state))
        {
            Debug.Log("容器内存在该状态");
            return;
        }
        mFSMStateDic.Add(state.mStateID, state);
    }

    public void DeleteFSMSate(FSMBaseState state)
    {
        if (state == null)
        {
            Debug.Log("角色状态为空,无法添加");
            return;
        }
        if (!mFSMStateDic.C
Unity3D状态机用于管理游戏对象的状态和状态转换。状态是指游戏对象可能处于的不同状态,例如待机、行走、跳跃等。状态机定义了游戏对象的所有状态及其之间的转换规则。 Unity状态机系统主要通过Animator组件实现。Animator组件内部包含多个状态,每个状态代表一个动画片段,可以通过连接这些状态来创建动画状态机状态机可以使用Animator Controller来控制,Animator Controller是一个可视化编辑器,通过在其中创建状态和转换来管理状态机状态机的基本工作原理是根据条件决定游戏对象之间的状态转换。每个状态都有一个或多个条件,当这些条件满足时,状态机会从当前状态转移到下一个状态。可以通过动画事件、脚本和条件参数来触发状态转换。 在使用Unity3D状态机时,首先需要创建状态和转换。可以在Animator Controller中通过添加状态机层来创建新的状态机。然后,在状态机中添加状态,并设置状态对应的动画。接下来,通过建立状态之间的转换来定义状态机的流程。可以通过定义条件、设置触发时间和设置转换条件等方式来进行状态转换的配置。 Unity3D状态机的优点包括易于使用和管理、通过动画片段和转换规则有效控制游戏对象的状态变化、支持在动画事件、脚本和条件参数的基础上自定义状态转换等。通过合理设计和使用状态机,可以有效地控制游戏对象的行为,提升游戏的表现力和交互性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值