UNITY-个人练习FPS(Demo)-2

一、创建用户输入类

(一)定义集合信息

1.辅助类 用于存储自定义轴的信息

  public class fps_InputAxis
    {
        public KeyCode positive;//正向
        public KeyCode negative;//负向
    }

2.自定义键值对集合 键位名称与按键

public Dictionary<string,KeyCode> buttons=new Dictionary<string,KeyCode>();

3.自定义轴集合

public Dictionary<string, fps_InputAxis> axis = new Dictionary<string, fps_InputAxis>();

4.Unity自带的轴名称类

public List<string> unityAxis=new List<string>();

(二)定义添加按键、轴、Unity自带轴的方法

集合为Dictionary,用ContainsKey函数判断是否包含 ;

List集合用Contains判断

1.添加自定义按键方法

   private void AddButton(string n,KeyCode k)
    {
        //若buttons集合中包含此按键名称 则重新附值
        if (buttons.ContainsKey(n))
        {
            buttons[n] = k;
        }
        else//否则添加按键名称与值
        {
            buttons.Add(n, k);
        }
    }

2.添加自定义轴方法

 private void AddAxis(string n,KeyCode pk,KeyCode nk)
    {
        if (axis.ContainsKey(n))
        {
            axis[n] = new fps_InputAxis() { positive = pk, negative = nk };
        }
        else
        {
            axis.Add(n, new fps_InputAxis() { positive = pk, negative = nk });
        }
    }

3.添加Unity自带轴方法

 private void AddUnityAxis(string n)
    {
        if (!unityAxis.Contains(n))
        {
            unityAxis.Add(n);
        }
    }

(三)设置默认按键、轴

   private void SetupDefaults(string type="")
    {
        //若类型为空或为buttons
        if (type==""||type=="buttons")
        {
            //若buttons集合从未进行赋值
            if (buttons.Count==0)
            {
                AddButton("Fire",KeyCode.Mouse0);
                AddButton("Reload", KeyCode.R);
                AddButton("Jump", KeyCode.Space);
                AddButton("Crouch", KeyCode.C);
                AddButton("Sprint", KeyCode.LeftShift);
            }
        }

        //若类型为空或为axis
        if (type == "" || type == "axis")
        {
            if (axis.Count==0)
            {
                AddAxis("Horizontal", KeyCode.W,KeyCode.S);
                AddAxis("Vertical", KeyCode.A, KeyCode.D);
            }
        }

        //若类型为空或为unityAxis
        if (type == "" || type == "unityAxis")
        {
            if (unityAxis.Count == 0)
            {
                AddUnityAxis("Mouse X");
                AddUnityAxis("Mouse Y");
                AddUnityAxis("Horizontal");
                AddUnityAxis("Vertical");
            }
        }
    }

(四)获取输入

1.获取键值输入 分为当持续按下;按下 即执行

Input.GetKey表示持续按下执行

Input.GetKeyDown表示按下执行

   public bool GetButton(string _button)
    {
        if (buttons.ContainsKey(_button))
        {
            return Input.GetKey(buttons[_button]);
        }
        return false;
    }
 public bool GetButtonDown(string _button)
    {
        if (buttons.ContainsKey(_button))
        {
            return Input.GetKeyDown(buttons[_button]);
        }
        return false;
    }

2.获取轴输入 分为瞬时和过渡

  • GetAxis():可以根据获取信息做到立马反向

  • GetAxisRaw():反向则需要过渡

动画中使用GetAxis(Vertical)与GetAxisRaw(Vertical)来控制人物的前后行走,如果使用前者,再向前走时立马往后走,即按下上箭头立马按下下箭头,其传输的值是由1立马变为-1,但是后者则是由1先变为0,再变为-1

  public float GetAxis(string _axis)
    {
        if (unityAxis.Contains(_axis))
        {
            return Input.GetAxis(_axis);
        }
        return 0;
    }    
  public float GetAxisRaw(string _axis)
    {
        if (axis.ContainsKey(_axis))
        {
            float val = 0;
            if (Input.GetKey(axis[_axis].positive))
                return 1;
            if (Input.GetKey(axis[_axis].negative))
                return -1;
            return val;
        }else if (unityAxis.Contains(_axis))
        {
            return Input.GetAxisRaw(_axis);
        }
        else return 0;
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值