Unity3D自学笔记——有限状态机(二)角色行走控制

有限状态机(二)角色行走控制

创建State

public enum FSMStateType
{
    None,
    Default,
    Idle,
    Move,
}

Idle

public class IdleState : FSMState
{
    public override void Action(FSMBase fsm)
    {
        fsm.PlayAnimation(AnimationParameters.Idle);
    }

    public override void EnterState(FSMBase fsm)
    {

    }

    public override void ExitState(FSMBase fsm)
    {

    }

    public override void InitState()
    {
        this.StateType = FSMStateType.Idle;
    }
}

Move

public class MoveState : FSMState
{
    public override void Action(FSMBase fsm)
    {
        fsm.PlayAnimation(AnimationParameters.Move);
        fsm.Controller.Move();
    }

    public override void EnterState(FSMBase fsm)
    {

    }

    public override void ExitState(FSMBase fsm)
    {

    }

    public override void InitState()
    {
        this.StateType = FSMStateType.Move;
    }
}

创建Trigger

public enum FSMTriggerType
{
    CanBeMove,
    IsIdle,
}

是否移动

public class CanBeMoveTrigger : FSMTrigger
{
    public override void Init()
    {
        this.TriggerType = FSMTriggerType.CanBeMove;
    }

    protected override bool Evaluate(FSMBase fsm)
    {
        return Mathf.Abs(Input.GetAxis("Horizontal")) > 0.5 || Mathf.Abs(Input.GetAxis("Vertical")) > 0.5;
    }
}

是否静止

public class IsIdleTrigger : FSMTrigger
{    public override void Init()
    {
        this.TriggerType = FSMTriggerType.IsIdle;
    }

    protected override bool Evaluate(FSMBase fsm)
    {
        bool rst = Mathf.Abs(Input.GetAxis("Horizontal")) <= 0.5 && Mathf.Abs(Input.GetAxis("Vertical")) <= 0.5;
        return rst;
    }
}

创建角色的FSM

public class FSMPlayer : FSMBase
{
    public override void ConfigFSM()
    {
        IdleState idle = new IdleState();
        idle.AddTrigger(FSMTriggerType.CanBeMove, FSMStateType.Move);

        MoveState move = new MoveState();
        move.AddTrigger(FSMTriggerType.IsIdle, FSMStateType.Idle);

        AddState(idle);
        AddState(move);
    }
}

创建角色的动画播放管理类

public class PlayerAnimationManager : CharacterAnimationManager
{
}

将FSM和AnimationManager挂在角色预制体上

这里写图片描述

设置Animator

这里写图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值