unity中fps中的枪械状态机简述(闲置、射击、换弹、推开、开镜)


前言

因为具体动作实现繁琐,且均是在同一套状态机代码框架内实现的,所以本文重点记录其框架
在这里插入图片描述


状态框架的实现:

第一步:

将不同状态分别用枚举类型表出对其进行封装

public enum WeaponState 
{
    idle,  
    shoot,
    reload,
    shove,
    telescope
}
private WeaponState weaponState; //对枚举状态进行封装
public WeaponState WeaponState
    {
        get => weaponState;
        set
        {
            weaponState = value;
            switch (weaponState)
            {
                case WeaponState.idle:
                    animator.SetBool("shoot", false);
                    animator.SetBool("reload", false);
                    animator.SetBool("shove", false);
                    break;
                case WeaponState.shoot:
                    break;
                case WeaponState.reload:
                	animator.SetBool("shoot", true);
                    break;
                case WeaponState.shove:
                    break;
                case WeaponState.telescope
                    break;
            }

        }
    }

在set中用switch来判断当weaponState变化时,如切换到换弹(reload)状态则播放该动画。注意该操作只在状态改变时执行一次

第二步:

再用一组相同的switch-case语句放入update中对当前的状态进行每一帧的监听,如处于idle状态则需检测是否有鼠标右键输入(开火键),如有则切换为开火状态…

  Update()
  {
	 switch (weaponState)
            {
                case WeaponState.idle:
                 if (Input.GetMouseButton(0))
                {
                    WeaponState = WeaponState.shoot;
                    Shoot();
                }
                    break;
                case WeaponState.shoot:
                    break;
                case WeaponState.reload:
                    break;
                case WeaponState.shove:
                    break;
                case WeaponState.telescope
                    break;
            }
}

而在开火状态(shoot),则需判断是否需要保持,或切换状态等等。
在这种状态处理上可实现监听,和连续调用。

总结

第一个switch-case语句中因放在set里,所以适合实现状态切换时只执行一次动作,如装弹和开镜的动画等。
第二个switch-case放在update中负责实现监听和连续调用,如监听状态改变的条件,连续开枪的动作等。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值