그런 건 없다.... 는 아니고, 사실 없긴 한데 내가 Input.GetAxis 함수처럼 버튼을 누를 때 -1~1 사이 값이 나오도록 하는 스크립트를 만들어 놓았음


using UnityEngine;
using System;

namespace WindowsInput
{
    [Serializable]
    /// <summary>
    /// InputSystem에서 Input.GetAxis() 함수를 대체하는 클래스
    /// </summary>
    public class Axis
    {
        // 기존 Input Manager를 커스터마이징하기 위한 변수들
        [Header("Old Input [...]")]
        /// <summary>
        /// 음수의 값을 출력하는 방향키
        /// </summary>
        public KeyCode negative;

        /// <summary>
        /// 양수의 값을 출력하는 방향키
        /// </summary>
        public KeyCode positive;

        [Header("Axis Settings")]
        /// <summary>
        /// 키를 누르지 않을 때 0으로 돌아가는 속도
        /// </summary>
        public float autoReturnSpeed = 3f;

        /// <summary>
        /// 키를 누를 때 움직이는 속도
        /// </summary>
        public float digitalReturnSpeed = 3f;

        /// <summary>
        /// 키를 누르지 않을 때 val이 이 값 이하면 0f로 초기화
        /// </summary>
        public float Dead = 0.001f;

        [SerializeField]
        /// <summary>
        /// Input Manager에서 커스텀 Axis의 움직임 값
        /// </summary>
        private float value;

        public Axis() { }

        public Axis(KeyCode negative, KeyCode positive, float dead, float autoReturnSpeed, float digitalReturnSpeed)
        {
            this.negative = negative;
            this.positive = positive;
            this.Dead = dead;
            this.autoReturnSpeed = autoReturnSpeed;
            this.digitalReturnSpeed = digitalReturnSpeed;
            this.value = 0f;
        }

        /// <summary>
        /// 값이 들어올 때, 움직임을 업데이트하는 함수
        /// </summary>
        /// <param name="input">입력 값</param>
        /// <param name="val">움직임 반환 값</param>
        public void UpdateAxis(float input, ref float val)
        {
            // 반대 방향 입력 감지: 현재 움직임(value)과 새 입력(input)의 방향이 반대일 경우
            if ((input > 0 && val < 0) || (input < 0 && val > 0))
            {
                val = 0f; // 값을 0으로 초기화하여 즉시 방향을 전환하도록 함
            }

            // 입력이 양수 방향이면, 움직임 값 상승
            if (input > Mathf.Epsilon)
            {
                val += digitalReturnSpeed * Time.deltaTime;
            }
            // 입력이 음수 방향이면, 움직임 값 하강
            else if (input < -Mathf.Epsilon)
            {
                val -= digitalReturnSpeed * Time.deltaTime;
            }
            // 아무런 입력이 없으면
            else
            {
                // 움직임이 양수 방향이면
                if (val > 0)
                {
                    // 움직임 값 자동 하강
                    val -= autoReturnSpeed * Time.deltaTime;
                    if (val < 0) val = 0;
                }
                // 움직임이 음수 방향이면
                else if (val < 0)
                {
                    // 움직임 값 자동 상승
                    val += autoReturnSpeed * Time.deltaTime;
                    if (val > 0) val = 0;
                }
            }

            // 입력이 없으면서 움직임 절대값이 Dead보다 작으면 0으로 초기화
            if (input == 0 && Mathf.Abs(val) < Dead)
            {
                val = 0f;
            }

            // 움직임의 값은 -1 ~ 1 사이로 제한
            val = Mathf.Clamp(val, -1f, 1f);
        }

        /// <summary>
        /// Input Manager에서 Axis를 커스텀할 때 사용하는 함수
        /// </summary>
        /// <returns></returns>
        public float UpdateAxisFromLegacyInput()
        {
            float input = 0;
            if (Input.GetKey(positive))
            {
                input = 1;
            }
            else if (Input.GetKey(negative))
            {
                input = -1;
            }
            UpdateAxis(input, ref value);
            return value;
        }

        /// <summary>
        /// Input Manager에서 커스텀 Axis의 움직임 값 반환 함수
        /// </summary>
        /// <returns></returns>
        public float GetValue()
        {
            return value;
        }

        /// <summary>
        /// GetAxisRaw 커스텀 함수
        /// </summary>
        /// <returns></returns>
        public float GetValueRaw()
        {
            bool negativeHeld = Input.GetKey(negative);
            bool positiveHeld = Input.GetKey(positive);

            if (negativeHeld && positiveHeld)
            {
                return 0f;
            }
            if (negativeHeld)
            {
                return -1f;
            }
            if (positiveHeld)
            {
                return 1f;
            }
            return 0f;
        }
    }
}

그냥 복사해서 쓰면 됨


사용 방법은 다음과 같음



a15714ab041eb360be3335625683746f01534429d6a4ec89d53467f39e15cd6e99c8e44b1e2b474187bb2188


1. 인풋을 담당할 클래스 내에 Axis 만들어주고, 입력값 여부 판별할 moveVec 변수, 실제 움직임 값을 반환받을 curVec 변수를 생성



a15714ab041eb360be3335625683746f01534429d6a4ec89d53467f09913cd6eed3c0fc0b5d6e6c8a0de754a3f


2.  Input System의 OnMove(이건 Input Actions에 이름을 어떻게 설정했냐에 따라 다름) 함수를 생성해서 moveVec에서 InputValue value의 값을 받아옴



a15714ab041eb360be3335625683746f01534429d6a4ec89d53467f59f15cd6edd8c04edb47cac4db7d27b07


 3. move.UpdateAxis 함수를 통해 curVec의 값을 갱신함



결과:


2eb2dd36e4c03deb6ba5d1bc109f2732838e8ff6fbc22e4953eec3be943366fef84e0848360b76a51aa20674c9bf8169c0810e900f3ea78743


(Old Input은 기존의 Input.GetAxis("Horizontal")이랑  Input.GetAxis("Vertical"))

보다시피 방향키를 눌렀을 때 되도록 비슷하게 작동함

다만, 기존 Input.GetAxis랑 다르게 왼쪽과 오른쪽이 동시에 눌리면 움직임이 0으로 되돌아가게 설정했음

(기존 Input.GetAxis는 방향키를 누르는 도중에 반대 방향키를 누르면, 그냥 값이 그 자리에서 멈추는 현상이 발생함)