Unity_Input System 新输入系统

参考

官网文档

Input System新输入系统(一)

Input System新输入系统(二)

Input System新输入系统(三)——在游戏中更换按键绑定

练习 Input System Version 1.7.0

在这里插入图片描述
在这里插入图片描述

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

public class InputActionCtrl : MonoBehaviour
{
    public InputActionAsset actionAsset;
    private InputAction moveAction;
    private InputAction fireAction;
    private InputAction jumpAction;

    public InputActionReference moveReference;
    public InputActionReference fireReference;
    public InputActionReference jumpReference;

    public InputAction autoSettingAction; //Inspector 自定义

    void Start()
    {
        //方式1、开启所有 
        //moveAction = actionAsset.FindActionMap("TestMap").FindAction("Move");
        //fireAction = actionAsset.FindActionMap("TestMap").FindAction("Fire");
        //jumpAction = actionAsset.FindActionMap("TestMap").FindAction("JumpState");
        //actionAsset.Enable();

        方式2、开启单个
        moveAction = moveReference.action;
        fireAction = fireReference.action;
        jumpAction = jumpReference.action;
        moveAction.Enable();
        fireAction.Enable();
        jumpAction.Enable();

        //方式1 action 
        moveAction.started += OnMove;
        moveAction.performed += OnMove;
        moveAction.canceled += OnMove;

        fireAction.performed += OnFire; //不启了Initial State Check 按键按下执行
        jumpAction.performed += OnJump; //开启了Initial State Check 按键状态变化执行

        //Inspector 自定义
        autoSettingAction.Enable();
        autoSettingAction.performed += OnSetting;

        InputSystem.onActionChange += OnActionChange;//所有 按键状态变化执行
    }



    private void OnDestroy()
    {
        //1、关闭所有 
        actionAsset.Disable();

        2、关闭单个
        //moveAction.Disable();
        //fireAction.Disable();
        //jumpAction.Disable(); 

        autoSettingAction.Disable();
    }


    private void OnJump(UnityEngine.InputSystem.InputAction.CallbackContext obj)
    {
        Log(obj.action);
    }
    private void OnFire(UnityEngine.InputSystem.InputAction.CallbackContext obj)
    {
        Log(obj.action);
    }
    private void OnMove(UnityEngine.InputSystem.InputAction.CallbackContext obj)
    {
        Vector2 vector2 = obj.action.ReadValue<Vector2>();
        Log(obj.action, null, vector2.ToString());
    }
    private void OnSetting(UnityEngine.InputSystem.InputAction.CallbackContext obj)
    {
        Log(obj.action);
    }
    private void OnActionChange(object obj, InputActionChange change)
    {
        switch (change)
        {
            case InputActionChange.ActionStarted:
            case InputActionChange.ActionPerformed:
            case InputActionChange.ActionCanceled:
                //Log((InputAction)obj, "InputSystemChange");
                break;
            default:
                break;
        }
    }


    void Log(InputAction action, string typeStr = null, string valStr = null)
    {
        string value = ($"InputAction {typeStr} On{action.name} : {action.phase} {action.IsPressed()} {action.triggered} {valStr}");
        Log(value);
    }

    void Log(string value)
    {
        Debug.Log(value);
    }


    //方式2 action 
    public Vector2 moveValue;
    public bool isFire, isJump;
    void Update()
    {
        moveValue = moveAction.ReadValue<Vector2>();
        isFire = fireAction.IsPressed();
        isJump = jumpAction.IsPressed();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值