포스 피드백 및 포스 피드백 컴포넌트

모바일 디바이스와 컨트롤러의 진동 기능을 사용하여 플레이어에게 게임의 포스를 전달하는 방법입니다.

Windows
MacOS
Linux

Force Feedback (가끔은 "럼블" 또는 컨트롤러 진동이라고도 하는 포스 피드백)은 게임에서 사용되는 디바이스(게임패드나 컨트롤러)의 진동을 통해 게임에서 일어나는 힘의 느낌을 플레이어에게 전달하는 것을 말합니다. 간단한 예제라면, 게임에서 폭발이 일어났을 때 포스 피드백을 사용하여 충격파 시뮬레이션을 하면, 한 층 더 높은 몰입감을 낼 수 있습니다.

구현하고 나면, 포스 피드백은 지원되는 모든 플랫폼에서 작동합니다. (4.10 이후로) iOS, Android, 컨트롤러가 포함됩니다.

포스 피드백 이펙트 애셋

Force Feedback Effect Asset (포스 피드백 이펙트 애셋)에는 특정 포스 피드백 이펙트를 정의하는 데 사용되는 프로퍼티가 들어있습니다. 이를 통해 디자이너는 포스 피드백이 사용되는 상황에 맞춰 커스터마이징 가능합니다.

image alt text

각 포스 피드백 이펙트는 여러 채널을 가질 수 있으며, 각 채널마다 각기 다른 이펙트를 재생할 수 있습니다. 예를 들어 한 채널에서는 컨트롤러 오른쪽에 크고 긴 진동을 내는 반면, 두 번째 채널에서는 왼쪽에 작고 짧은 파동을 재생할 수 있습니다. 각 채널의 이펙트 패턴은 커브에 의해 제어됩니다. 이 커브는 여기서 우클릭으로 편집할 수 있으며, 커브의 그래프에 더블클릭하여 내부 커브 에디터를 열 수도 있습니다.

내부 커브 에디터

커브, 키, 외부 커브 애셋 생성, 커브 에디터 사용법 관련 정보는 커브 에디터키와 커브 문서를 참고하세요.

포스 피드백 이펙트 기간은, 모든 채널의 커브 내 마지막 키의 위치에 따라 자동 계산됩니다. 예를 들어 채널이 세 개 있고 각각의 마지막 키 위치가 1.25, 1.5, 1.75 인 경우, 전체 이펙트의 기간은 1.75 가 됩니다.

채널 프로퍼티

각 채널에는 채널의 이펙트 재생 방식을 제어하는 프로퍼티가 있는데, 다음과 같습니다.

항목

설명

Affects Left Large

왼쪽 큰 모터 영향 - true 면 왼쪽 큰 모터가 이펙트 재생에 사용됩니다.

Affects Left Small

왼쪽 작은 모터 영향 - true 면 왼쪽 작은 모터가 이펙트 재생에 사용됩니다.

Affects Right Large

오른쪽 큰 모터 영향 - true 면 오른쪽 큰 모터가 이펙트 재생에 사용됩니다.

Affects Right Small

오른쪽 작은 모터 영향 - true 면 오른쪽 작은 모터가 이펙트 재생에 사용됩니다.

Curve

커브 - 시간에 따른 이펙트의 강도를 제어하는 커브입니다. 다른 말로 이 커브가 진동 패턴을 정의합니다. 0.5 이상 값은 진동, 미만은 진동하지 않습니다.

포스 피드백 이펙트 애셋 생성

포스 피드백 이펙트 애셋은 콘텐츠 브라우저 에서 생성합니다:

  1. 콘텐츠 브라우저 에서 신규 추가 - 기타 > 포스 피드백 이펙트 를 선택하고 방금 만든 애셋을 엽니다.

    CreateForceFeedbackEffect.png

  2. 기본적으로 애셋에는 채널이 하나지만 추가할 수 있습니다. 각 채널에 대해 채널이 영향을 주는 네 개의 출력 조합을 선택합니다.

    FFChannels.png

  3. 커브에 Shift 키를 누르고 좌클릭 하면 키를 하나 이상 추가할 수 있습니다.

    curve.png

  4. 값을 직접 입력하거나 커브 에디터에서 수정하여 키를 조정합니다.

    키 사이 커브 조정을 위해서는, 커브 선분에 우클릭하여 커브 함수를 변경한 뒤, 평소처럼 탄젠트 라인을 조정합니다.

포스 피드백 재생

에디터에서 프리뷰

포스 피드백 이펙트의 아이콘에 마우스 커서를 올리면 가운데 나타나는 "play" (재생) 버튼을 클릭하면 에디터에서 포스 피드백 이펙트를 미리볼 수 있습니다.

PreviewForceFeedbackEffect.png

플레이어에 바로

포스 피드백은 베이스 PlayerController 클래스에서 구현됩니다. 타겟 디바이스나 컨트롤러에서 포스 피드백을 재생하려면, 로컬 플레이어 컨트롤러에 접근할 수 있어야 합니다.

블루프린트에서 포스 피드백 재생

  1. 플레이어 컨트롤러로의 레퍼런스를 구합니다. Get Player Controller 노드나 저장된 노드면 됩니다.

    effect_controller.png

  2. 레퍼런스의 출력 핀을 끌어 놓은 다음, 컨텍스트 메뉴에 Play Force Feedback 이라 입력하고 Client Play Force Feedback 을 선택합니다.

    effect_play.png

    포스 피드백은 서버에서 호출된 경우 소유 클라이언트에 리플리케이트됩니다.

  3. 노드에 바로 지정하거나 변수로 연결해서 사용할 포스 피드백 이펙트를 지정합니다.

    effect_select.png

  4. 이펙트 반복재생을 원하면 Looping 을 체크합니다.

    effect_looping.png

  5. 옵션으로, Tag 칸을 통해 이펙트에 고유 이름을 설정합니다. 이 기능으로 이펙트 중지가 가능한데, 같은 태그의 이펙트가 이미 재생중인 경우, 먼저 것은 중지되고 새로운 이펙트가 대신 재생됩니다.

    effect_tag.png

C++ 에서 포스 피드백 재생

로컬 플레이어 컨트롤러에서 ClientPlayForceFeedback 을 호출하지만, 사용할 포스 피드백 이펙트 뿐 아니라 이펙트의 루핑 여부, 옵션으로 이름도 전달해 줍니다. 이름이 제공되고, 원래 이펙트가 끝나기 전 이름이 같은 포스 피드백 이펙트가 추가 재생되면, 원본은 즉시 중지하고 새로운 이펙트를 대신 재생합니다.

월드 위치에서

관찰하는 플레이어와의 거리에 따라 강도가 변하는 포스 피드백 이펙트를 재생하려면, 이펙트 진원지 역할을 할 월드 위치에 Force Feedback Component (포스 피드백 컴포넌트)를 배치합니다. 포스 피드백 컴포넌트는 명령 시 포스 피드백 이펙트를 재생하지만, 월드에 물리적 위치를 갖고 있습니다. 사운드나 라이트처럼, 플레이어가 느끼는 포스의 강도가 진원지와의 거리에 따라 데이터로 정의된 감쇠 세팅대로 변할 것입니다.

포스 피드백 컴포넌트는 일반 코드나 블루프린트 에디터 메소드를 통해 어느 액터에도 붙일 수 있지만, 라이브 게임플레이 도중에도 추가시킬 수 있습니다. (주어진 월드 위치에서 스폰하기 위해서는) UGameplayStatics::SpawnForceFeedbackAtLocation, 라는 유틸리티 함수를 호출하는 것으로 가능한데, (기존의 특정 컴포넌트에 붙이기 위해서는) UGameplayStatics::SpawnForceFeedbackAttached 유틸리티 함수를 호출하면 됩니다. 이 함수는 스폰된 포스 피드백 컴포넌트를 반환하여, 원하는 대로 조작을 계속할 수 있습니다. 하지만 이펙트 재생을 마친 후 컴포넌트 쓸모가 없는 경우, "Auto Destroy" (자동 소멸) 옵션을 사용하여 이펙트가 끝나면 자체 소멸되도록 할 수 있습니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼