Unity - 6000.2.10f1 - InputSystem 버그

2025. 11. 7. 16:56·Unity

버그상황 재현

유니티의 new Input System을 통해 다양한 액션을 정의할 수 있다.

 

 

Player 오브젝트에 Player Input을 넣고, 원하는 액션맵이 정의돼있는 inputactions 파일을 Actions에 등록해서 사용할 수 있다.

별도로 설정하지 않았다면 최초에 생성되는 전역 액션인 InputSystem_Actions가 자동으로 들어가있을 것이다.

 

 

Action Maps에 Player의 이동에 쓰일 Move와 Rotate를 정의해두었다.

(Actions 탭 하단에 보이는 두 CamActive Actions는 본래 Camera Action Maps에 있던 액션들이다.)

 

우선 Player의 이동 스크립트를 아래와 같이 작성했다.

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float _moveSpeed = 20f;
    [SerializeField] private float _rotpeed = 10f;

    private Rigidbody _rb;
    private Vector2 _moveInput;
    private Vector2 _rotInput;

    void Awake()
    {
        _rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // move
        Vector3 dir = transform.forward * _moveInput.y;
        _rb.linearVelocity = dir * _moveSpeed;

        // rotate
        if (Mathf.Abs(_rotInput.x) > 0.01f)
        {
            Quaternion rot = Quaternion.Euler(0f, _rotInput.x * _rotpeed * Time.fixedDeltaTime, 0f);
            _rb.MoveRotation(_rb.rotation * rot);
        }
    }

    public void OnMove(InputAction.CallbackContext ctx)
    {
        _moveInput = ctx.ReadValue<Vector2>();
    }

    public void OnRotate(InputAction.CallbackContext ctx)
    {
        _rotInput = ctx.ReadValue<Vector2>();
    }
}

 

W, S 입력을 통해 앞, 뒤로 이동하고

A, D 입력을 통해 좌, 우로 화면을 회전한다.

 

이번 프로젝에서는 Invoke Unity Events 를 이용해 인스펙터에 직접 메서드를 등록해 사용해보았다.

 

 

실행해보면 플레이어가 Move, Rotate를 정상적으로 수행하는 걸 알 수 있다.

 

다음으로 카메라 전환을 위해 SubCam 2개를 준비하고,

캠 전환을 컨트롤하기 위해 CameraManager에 Player Input을 넣고, 액션 맵을 Camera로 설정 후 카메라 전환 메서드 이벤트 등록까지 마쳤다.

 

 

여기서 문제가 발생했다.

 

모든 Input이 먹지 않고, 플레이어가 계속 앞 방향으로 향한다.

각 메서드에 Debug.Log 를 찍어보아도 정상적으로 실행조차 되고있지 않다는 것이 확인됐다.

 

더욱 난감한 것은

내 컴퓨터에서는 이런 현상이 발생하고, 새 프로젝트에서도 동일하게 재현이 되는데

다른 컴퓨터에서는 또 정상적으로 작동한다는 것이다...

 


해결 방법

"제 컴에서는 되는데요?" 가 되어버려서 현재로서 정확한 원인을 규명할 수는 없었다.

다만 몇가지 확실한 해결 방안은 있었다.

 

1. 한 곳에서 모든 Input 처리하기

InputManager처럼 중앙에서 모든 입력을 수집하고 필요한 객체에 이벤트를 전달하는 구조로 변경한다.
즉, Player Input을 하나만 두고 Move, Rotate, Camera 전 등 모든 액션을 통합 관리한다.
이 경우 장치 충돌이 발생할 여지가 없어 가장 안정적이며, 구조적으로도 명확하다.
특히 액션 맵이 많지 않은 프로젝트라면 오히려 더 단순하고 유지보수가 쉽다

 

2. Project-wide Actions로 등록된 액션 외에 개별 액션 생성

이번 테스트에서 특이하게도, 같은 액션 파일을 공유하더라도 “Project-wide Actions”로 등록된 전역 액션이 아닌 경우에는 Player Input을 2개 사용해도 정상 작동했다.

즉, Player Input이 같은 .inputactions 파일을 참조하더라도

  • Project Settings → Input System Package → Default Input Actions Asset에 등록되어 있지 않고,
  • 각 Player Input이 로컬 참조 형태로 액션맵을 사용할 때

서로의 장치 점유가 겹치지 않으며, Player 액션맵과 Camera 액션맵 모두 정상적으로 입력을 받을 수 있었다.


이 차이는 Unity가 Project-wide Actions를 전역(static) 컨텍스트로 관리하면서 내부적으로 하나의 InputSystem 인스턴스를 공유하기 때문으로 보인다.

즉, 전역 등록된 액션은 내부적으로 장치 소유권을 통합 관리하기 때문에 Player Input이 여러 개면 충돌이 발생하지만, 로컬 액션으로 참조하면 각각 독립적으로 동작한다.

 

근데 이렇게 정리하면서도 왜 다른 컴퓨터에서는 또 되는 건지 도통 이해할 수가 없다....

 

이후 정확한 원인이 추가적으로 해명된다면 글을 갱신하거나 추가 글을 작성해보도록 하겠다.


추가 로그

InputSystem 자체의 LifeCycle을 확인해보라는 Unity 측 답변을 받은 뒤, 실천해보기 위해 프로젝트를 켰더니

이번에는 또 정상적으로 Input이 동작한다.

이번 프로젝트는 new Input System에 익숙해지기 위해서 별도로 스크립트에서 초기화 단계를 거치지 않고 인스펙터에서 컴포넌트를 직접 꽂아 넣는 방식으로 구현했기에 내가 초기화를 직접 제어하고 있진 않았다.

 

즉 현재까지의 상황을 종합했을 때 InputSystem의 Initialization 단계에서 Player Input이 Project-wide Actions에 등록된 액션을 참조하면서 내부적으로 터져버려서 인풋 감지 및 처리가 망가지는 것으로 추측된다.

 

문제는... 차라리 그렇다면 인풋을 아예 감지를 하지를 말던가...

사건은 더더욱 미궁에 빠지게 됐다.

 

'Unity' 카테고리의 다른 글

Unity - Object Pool Pattern : 오브젝트 풀  (0) 2025.11.12
Unity - FSM : Finite State Machine - 유한 상태 머신  (0) 2025.11.11
Unity 프로젝트 이슈 해결 - 범위내 적 타게팅 최적화  (0) 2025.11.04
Unity - Raycast (레이캐스트)  (0) 2025.10.22
Design Pattern - Observer Pattern (옵저버 패턴)  (0) 2025.10.21
'Unity' 카테고리의 다른 글
  • Unity - Object Pool Pattern : 오브젝트 풀
  • Unity - FSM : Finite State Machine - 유한 상태 머신
  • Unity 프로젝트 이슈 해결 - 범위내 적 타게팅 최적화
  • Unity - Raycast (레이캐스트)
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스택
    inputsystem
    자료구조
    Abstract
    useState
    struct
    function
    게임
    Photon
    터미널
    최적화
    delegate
    Network
    firebase
    list
    unity
    클래스
    추상 클래스
    알고리즘
    interface
    유니티
    큐
    콘솔
    stack
    console
    C#
    Design Pattern
    class
    Queue
    네트워크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
Unity - 6000.2.10f1 - InputSystem 버그
상단으로

티스토리툴바