버전

menu_open
Wwise Unreal Integration Documentation
Blueprint에서 음악 재생하기

Blueprint에서 Event 게시 및 State 설정하기 - BeginPlay | PostEvent | Self

이 예시에서도 마찬가지로 게임이 시작될 때 무언가를 재생해보게 됩니다. 하지만 이번에는 Blueprint로부터 사운드를 재생해봅시다. 이 방법은 Music을 재생하기에 좋은 방법입니다. 이러한 음악은 무제한 반복될 수 있습니다.

Wwise의 Music Playlist Container 안에 있는 Music Segment는 Play_Music Event로부터 호출될 때 무제한 반복 재생됩니다.

Unreal Editor에서 ThirdPersonExampleMap 레벨에 사운드를 추가해봅시다. 이 레벨에는 Lights, Meshes, 심지어 제어할 수 있는 캐릭터까지 이미 다양한 Actor가 들어 있습니다. 우리는 이 레벨에서만 작업할 것이기도 하고 이러한 Actor가 계속해서 씬에 남아있을 것이기 때문에 World Outliner에서 Actor 하나를 골라서 필요한 오디오 통합을 추가해봅시다.

참고: 씬이 여러 개일 경우 음악이 여러 다른 맵에서도 유지되도록 하기 위해서 Persistent 레벨(지속 레벨)을 만들어야 할 수 있습니다.

우리는 구동 가능한 캐릭터의 Blueprint를 사용해봅시다. 이 Blueprint는 이미 생성되었으며 ThirdPersonCharacter에 추가되어 있습니다.

  1. World Outliner > ThirdPersonCharacter Actor로 가서 Edit ThirdPersonCharacter를 선택하세요.

    그러면 ThirdPersonCharacter의 Blueprint가 열립니다. 바로 여기에서 Wwise Event를 호출해봅시다. Gamepad Input, Jump, Movement Input과 같이 다양한 시스템이 이미 만들어진 것이 보이시나요? 바로 이러한 시스템을 사용하여 캐릭터가 구동되는 것인데, 이 부분은 지금 우리에게 필요하지 않습니다. 그대로 놔두고 빈 공간을 찾으세요. Wwise Event를 재생('게시'라고도 함)하기 위해서는 Unreal Event가 (1) 재생을 시작할 때 호출되도록 하며, (2) Wwise Event를 재생하는 함수로 이 이벤트를 연결시키고, (3) 이 이벤트가 어떤 Actor를 재생해야 할지를 지정해야 합니다.

  2. Event Graph에서 빈 공간을 우클릭하고 'BeginPlay'를 입력하여 해당 Unreal Event를 선택하세요.

  3. BeginPlay 화살표에서 커넥터(connector)를 드래그해와서 'postevent'를 입력하고 Post Event 함수를 선택하세요.

    이 구성이 실제로 작동하기 위해서는 Post Event 함수에 Actor로의 참조를 추가하여 Wwise Event를 배치할 장소가 어디인지 알 수 있도록 해주어야 합니다.

  4. Actor Object Reference에서 커넥터를 드래그해와서 'self'를 입력하고 Get a reference to self를 선택하세요.

    이렇게 시스템 작업이 끝났습니다. 이제 AkEvent 속성에서 Wwise Event를 선택하면 게임을 플레이할 때 이 이벤트가 게시됩니다. 이 예시에서는 다음과 같이 Play_Music Event를 선택해봅시다.

  5. Post Event 함수에서 Wwise Event를 선택하세요.

    이것이 바로 Blueprint를 사용하여 Wwise로의 호출을 제어하는 방법입니다. 여기서 제공하는 예시는 아주 기본적입니다. 실제로 대부분의 상황은 훨씬 더 복잡합니다.

AkComponent 사용하기

Blueprint 환경은 Actor가 작동하는 방식을 제어하는 데에 훌륭하지만 레벨에서 Actor를 관리하고 위치 지정하는 데에는 그리 편리하지 않습니다. 대신 Blueprint에서 일부 컨트롤을 Details 패널에 노출시켜 Level Editor에서 최대한 작업하는 것이 좋죠. 이 작업은 AkComponent를 Actor를 추가하여 실행할 수 있습니다. 이렇게 하면 필요한대로 Level Editor에서 직접 사운드의 위치를 상쇄할 수 있습니다.

  1. Add Component를 선택하고 'Ak'를 검색해서 Ak를 선택하세요.

  2. Event Graph에서 Post Event 함수와 Self로의 참조를 삭제하세요.

    그런 다음 AkComponent를 게시될 오브젝트로서 참조하여이 컴포넌트가 게시된 사운드의 위치와 방향이 되도록 해봅시다.

  3. AkComponent를 Blueprint 안으로 드래그하고, Object Reference에서 Post Ak Event를 찾으세요.

  4. BeginPlayPost Ak Event에 연결하세요.

    이제 AkComponent에서 선택된 Wwise Event를 가져올 수 있습니다.

  5. AkEvent Object Reference에서 Get Ak Audio Event를 찾아서 AkComponent 참조로 연결하세요.

  6. 컴파일한 후 Details 패널에서 Ak를 선택하고 Event를 선택하세요.

    더 이상 Event를 변경하기 위해 Blueprint를 열 필요가 없습니다. 그리고 연결된 Actor를 기준으로 사운드의 위치를 상쇄할 수 있습니다.

Occlusion 무시하기

무음에서 소리가 나기까지 실습에서는 AkAmbientSound를 레벨에 추가하고 환경음을 재생하도록 했습니다. 이때 AkAmbientSound를 ThirdPersonCharacter 바로 옆에 추가했는데, 이 경우에는 잘 작동했지만 레벨에서 일부 상자 뒤를 살펴보면 사운드가 없어지는 것을 볼 수 있습니다. 이 잠재적인 문제를 살펴봅시다.

  1. AkAmbientSound Actor를 찾으세요.

    게임을 시작할 때 사운드가 전체 볼륨으로 재생되지만 카메라(예:리스너)가 Actor의 위치를 알 수 없는 오브젝트의 반대편으로 걸어갈 경우 사운드가 페이드 아웃됩니다. 그 이유는 Occlusion(차단)이 기본적으로 활성화되어 있기 때문입니다. 환경음이나 음악과 같은 사운드에는 차단이 필요하지 않습니다. 이 경우 Occlusion Refresh Interval을 0으로 설정하면 차단을 비활성화할 수 있습니다.

  2. Details 뷰에서 AkComponent > Occlusion > Occlusion Refresh Interval을 0으로 설정하세요.

    혹은 Post Event 함수를 사용하여 Wwise Event를 게시할 경우 SetOcclusionRefreshInterval 함수를 사용하여 Wwise Event를 게시하기 전에 이 속성을 설정할 수 있습니다.

State로 음악 제어하기

대부분의 경우 게임에는 게임플레이의 상황에 맞게 적응하고 다양성을 제공하는 상호작용 음악이 적합합니다. 다음 예시는 흔히 사용되는 방법인 State를 사용하여 음악을 제어하는 방법을 보여줍니다. 작업을 시작하기 전에 먼저 Wwise에서 새로운 음악 시스템을 만들어야 합니다. 다음 그림에서 보이는 것처럼 'Music' State에 따라 'Repeat Calm'과 'Repeat Intense' Music Playlist 사이로 전환할 수 있는 Music Switch Container를 만드세요.

Calm, Intense, None이라는 세 개의 State가 있는 것을 보세요. 이 구성은 게임에서 State를 설정하여 런타임에 음악을 변경할 수 있도록 해줍니다. 하지만 그렇게 하기 전에 먼저 게임을 시작할 때 어떤 State가 설정될 것인지를 선택해야 합니다. 그러기 위해서 AkComponent 사용하기 에서 Occlusion 무시하기 과 같이 Occlusion Refresh Interval을 0으로 설정하기 위해 실행했던 단계에서 진행해봅시다.

초기 State가 무엇일지를 제어하기 위해서 먼저 음악이 게시되기 전에 State를 설정하세요.

  1. BeginPlay에서 SetState 함수를 드래그해오세요.

  2. Initial State를 Music-Calm으로 설정하세요.

    초기 State 구성이 끝났습니다.

    런타임 State 변경의 경우 보통 플레이어가 특정 영역 안에 들어가면 Trigger에 의해 정의된 State로 음악 State를 제어하는 방식을 사용합니다. 그렇게 하기 위해서 Box Trigger (1-2)를 만들어서 트리거 경계선 안에 들어가면 State를 설정하는 Blueprint 시스템을 구성해봅시다 (3-4). 그런 다음 Details 뷰에서 State를 표시하여 (5-6) 나중에 다시 Blueprint를 열지 않아도 되도록 해봅시다.

  3. Box Trigger를 레벨 안으로 드래그하세요.

  4. Box Trigger의 크기를 늘리세요.

  5. Blueprint/Add Script를 선택하고 (1) 알맞은 이름을 지정한 후 (2) Create Blueprint를 선택하세요 (3).

    이제 Blueprint 시스템을 설계해 봅시다. 새로운 Blueprint를 만들면 ActorBeginOverlap Event가 자동으로 주어집니다. 이 이벤트는 무언가가 Box Trigger 안으로 들어오는 것을 감지하는 데에 유용합니다. 이 Event를 사용해서 들어오는 무언가가 플레이어 Actor인지를 감지하고, 맞을 경우 State를 설정하도록 해봅시다.

  6. ActorBeginOverlap에서 ThirdPersonCharacter로 캐스트하고 Exec을 Set State 함수와 연결하세요.

    이제 Set State 함수에서 State를 선택할 수 있습니다. 하지만 이렇게 하면 이 Box Trigger를 또 다른 State에 사용할 수 없기 때문에 나중에 변경하려면 다시 Blueprint를 열어야 합니다. 그럴 필요가 없도록 Blueprint 밖에서 접근할 수 있는 Variable을 만들어봅시다.

  7. State Value에서 드래그해와서 Promote to variable을 선택하세요.

    이제 My Blueprint > Variables 아래의 왼쪽에 변수가 생겼습니다. 하지만 아직 Blueprint 밖에서는 보이지 않습니다.

  8. 변수의 이름을 'MusicState'로 변경하고 눈 모양 아이콘을 선택해서 퍼블릭(public)으로 만드세요.

  9. Compile을 선택하고 Blueprint를 닫으세요.
  10. Trigger를 선택한 후 Details > Default > Music State에서 State를 선택하세요.

  11. ThirdPersonCharacter를 사용하여 새로운 Trigger 안으로 걸어 들어가서 음악이 변경될 때까지 기다려보세요.

    이제 이 트리거를 복제해서 첫 번째 트리거에 아무 영향을 주지 않으면서 다른 곳에 사용하여 다른 State를 설정할 수 있습니다.

참고: Music Switch Container의 Transition이 Exit Cue로 설정되었을 경우 음악이 변경되기까지 시간이 조금 걸릴 수 있습니다.

이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요