4-2. 2조 InputActionPhase, Update와 FixedUpdate (+ AudioSource)

keubung·2024년 10월 24일

InputAction.CallbackContext에서 context.phase는 현재 입력 액션의 상태를 나타낸다.

  • InputActionPhase 열거형에서 사용할 수 있는 상태
  1. Waiting : 입력 액션이 활성화되었지만 아직 트리거되지 않은 상태 - 입력을 기다리는 중
  2. Canceled : 입력 액션이 취소된 상태 - 일반적으로 트리거되기 전에 입력이 중단된 경우 발생
  3. Performed : 입력 액션이 성공적으로 수행된 상태 - 입력이 완료되었을 때 발생
  4. Started : 입력이 시작된 상태 - 키를 누르기 시작할 때 발생
  5. Disabled : 입력 액션이 비활성화된 상태 - 입력을 처리할 수 없는 상태

    사용 예시

    public void OnMove(InputAction.CallbackContext context)
    {
        if (context.phase == InputActionPhase.Performed)
        {
            curMovemeentInput = context.ReadValue<Vector2>();
        }
        else if (context.phase == InputActionPhase.Canceled)
        {
            curMovemeentInput = Vector2.zero;
        }
    }

물리연산을 하는 곳에 Update보다 FixedUpdate가 좋은 이유는?

1. Update : 프레임 속도에 의존

  • 매 프레임마다 호출되며, 프레임 속도에 따라 호출 빈도가 달라진다.
  • 프레임 속도는 CPU, GPU 성능, 그래픽 처리량 등에 따라 변동될 수 있어, Update가 호출되는 간격은 일정하지 않다.
    - Update는 매 프레임마다 실행되지만, 각 프레임의 간격이 일정하지 않기 때문에 물리 계산의 결과가 일관되지 않을 수 있다.
    - 화면에 표시되거나 실시간으로 반응해야 하는 논리적 작업을 처리하는 데 적합.

2. FixedUpdate : 일정한 시간 간격으로 호출

  • Unity의 물리 엔진이 작동하는 일정한 간격(기본값 0.02초, 즉 50FPS (Fixed Time Step))으로 호출.
  • 물리 연산(예: Rigidbody와 관련된 동작)은 이 고정된 시간 간격으로 처리되기 때문에 시간에 따른 물리적인 계산이 정확하고 일관된다.
    - 일정한 시간 간격으로 호출되며, 물리 연산과 같은 일정한 타이밍이 필요한 작업에 적합.
    - 물리 관련 코드(Rigidbody 움직임, 충돌 처리 등)를 처리하는 데 사용.

-> 물리 연산은 고정된 시간 간격으로 일관되게 처리되어야 하기 때문에 FixedUpdate에서 처리하는 것이 좋다.


AudioSource 관련

Q. 효과음들을 각각 볼륨 값이 다르게 재생하고 싶은데, 하나의 AudioSource로는 제어가 불가능한가요?

A. 하나의 AudioSource 에서 재생되는 소리들은 모두 같은 영향을 받기 때문에, 여러 개의 AudioSource로 재생해서 개별적으로 볼륨 값을 조절해야 합니다.
효과음 AudioSource의 경우 소리를 재생할 때, 오브젝트 풀링을 사용해 관리를 하면 좋습니다.

profile
김나영(Unity_6기)

0개의 댓글