포스 피드백은 플레이어에게 게임에서 발생하는 포스를 전달하기 위해 게임에서 종종 사용되는 디바이스의 진동입니다. 이 기능은 게임패드나 컨트롤러의 '떨림' 또는 진동으로 알려져 있습니다. 예를 들어, 게임에서 폭발이 발생하면 포스 피드백을 사용하여 그 폭발의 충격파를 시뮬레이션할 수 있습니다. 이를 통해 플레이어의 몰입감을 한층 강화합니다.
포스 피드백은 iOS, Android 및 콘솔의 입력 컨트롤러 등, 다양한 일반 플랫폼에서 지원됩니다.
지원되는 특정 피드백 기능은 플랫폼마다 다릅니다. 자세한 내용은 해당 플랫폼 개발 문서를 참조하세요.
포스 피드백 이펙트 구조
포스 피드백 이펙트(Force Feedback Effect) 에셋에는 특정 포스 피드백 이펙트를 정의하는 데 사용되는 프로퍼티가 포함되어 있습니다. 이 프로퍼티를 사용하여 디자이너는 다양한 상황에 맞춰 포스 피드백을 커스터마이징할 수 있습니다.
채널 디테일
포스 피드백 이펙트는 여러 채널을 포함할 수 있습니다. 각 채널 은 다른 이펙트를 재생할 수 있습니다. 예를 들어, 한 채널은 오른쪽 컨트롤러에 크고 긴 진동을 재생하고 두 번째 채널은 왼쪽 컨트롤러에 작고 짧은 폭발을 재생할 수 있습니다.
각 채널에는 다음과 같은 프로퍼티가 있어 채널 이펙트 재생 방식을 제어할 수 있습니다.
| 채널 이름 | 설명 |
|---|---|
| 왼쪽 큰 모터에 영향(Affects Left Large) | 활성화하면 왼쪽 큰 모터를 사용하여 이펙트를 재생합니다. |
| 왼쪽 작은 모터에 영향(Affects Left Small) | 활성화하면 왼쪽 작은 모터를 사용하여 이펙트를 재생합니다. |
| 오른쪽 큰 모터에 영향(Affects Right Large) | 활성화하면 오른쪽 큰 모터를 사용하여 이펙트를 재생합니다. |
| 오른쪽 작은 모터에 영향(Affects Right Small) | 활성화하면 오른쪽 작은 모터를 사용하여 이펙트를 재생합니다. |
| 커브(Curve) | 시간 경과에 따른 이펙트 강도를 제어합니다. 즉, 진동의 패턴을 정의합니다. 0.0보다 값이 크면 진동이 발생하며 0.0보다 값이 작으면 진동이 발생하지 않습니다. |
포스 피드백 커브
각 채널의 이펙트 패턴은 커브를 통해 제어합니다. 다음과 같은 방식으로 내부 커브 에디터(Internal Curve Editor)에서 커브에 키를 추가할 수 있습니다.
- 마우스를 우클릭하고 키 추가를 선택합니다.
- 커브의 그래프를 더블클릭하여 내부 커브 에디터를 엽니다.
커브, 키, 외부 커브 에셋 생성 방법 및 커브 에디터 사용 방법에 대한 자세한 내용은 커브 에디터 및 키와 커브 페이지를 참조하세요.
디바이스별 오버라이드
언리얼 엔진에서 포스 피드백 에셋으로 작업할 때, 플랫폼마다 진동 모터나 피드백 시스템 작동 방식이 다르게 구현되어 있습니다. 포스 피드백 에셋은 디바이스별 오버라이드(Per Device Overrides) 를 사용하여 여러 플랫폼을 지원합니다.
추상화 레이어인 디바이스별 오버라이드를 통해 각 플랫폼에 대해 다른 피드백 세팅을 설정할 수 있습니다. 예를 들어, Xbox 컨트롤러에는 강한 진동을 적용하고 PlayStation 컨트롤러에는 더 세밀하고 미묘한 진동을 적용할 수 있습니다.
이러한 세팅을 수정하려면 포스 피드백 이펙트를 클릭한 다음, 디테일(Details) > 디바이스별 오버라이드 로 이동합니다.
디바이스 프로퍼티
디바이스 프로퍼티(Device Properties) 는 라이트 컬러 디스플레이나 햅틱 트리거 저항 같은 입력 디바이스의 다양한 피지컬 프로퍼티를 나타냅니다.
| 디바이스 프로퍼티 타입 | 설명 |
|---|---|
| 오디오 기반 진동(Audio Based Vibration) | 입력 디바이스의 스피커에 사운드를 재생합니다. 이를 지원하는 플랫폼에서 이 사운드는 좌우 오디오 채널이 컨트롤러의 좌우를 나타내는 진동 형태로 |
| 재생됩니다. 이 기능은 실험단계이며 PS5 DualSense 컨트롤러에서만 작동합니다. 이 기능을 사용하려면 환경설정에 다음을 추가해야 합니다.
|
|
| 디바이스 컬러(커브)(Device Color(Curve)) | 커브를 사용하여 시간 경과에 따라 입력 디바이스의 라이트 컬러를 변경합니다. 이 프로퍼티는 플랫폼별로 구현되므로, 플랫폼마다 다른 행동을 보일 수 있습니다. |
| 디바이스 컬러(스태틱)(Device Color(Static)) | 입력 디바이스의 컬러를 스태틱 컬러로 설정합니다. 이 경우 프로퍼티 평가가 완료되어도 디바이스 컬러가 리셋되지 않습니다. 활성화하면 디바이스 프로퍼티 컬러가 설정되는 원샷 이펙트로 생각하면 됩니다. 이 프로퍼티는 플랫폼별로 구현되므로, 플랫폼마다 다른 행동을 보일 수 있습니다. |
| 트리거 피드백(Trigger Feedback) | 단순 트리거 피드백을 설정합니다. 이 프로퍼티는 플랫폼별로 구현되므로, 플랫폼마다 다른 행동을 보일 수 있습니다. |
| 트리거 저항(Trigger Resistance) | 트리거가 시작 값과 종료 값 사이에서 눌리는 동안 트리거에 선형 저항을 제공합니다. 이 프로퍼티는 플랫폼별로 구현되므로, 플랫폼마다 다른 행동을 보일 수 있습니다. |
| 트리거 진동(Trigger Vibration) | 트리거 진동을 설정합니다. 이 프로퍼티는 플랫폼별로 구현되므로, 플랫폼마다 다른 행동을 보일 수 있습니다. |
자세한 내용은 디바이스 프로퍼티 문서를 참조하세요.
기간
포스 피드백 이펙트의 기간은 모든 채널의 커브에 있는 마지막 키의 위치에 따라 자동으로 계산됩니다. 예를 들어, 3개의 채널이 있고 각 채널의 마지막 키 값이 각각 1.25, 1.5 및 1.75 로 설정되어 있다면, 전체 이펙트 기간은 1.75 입니다.
포스 피드백 이펙트 에셋 생성
포스 피드백 이펙트 에셋은 콘텐츠 브라우저(Content Browser) 를 사용하여 생성합니다.
-
콘텐츠 브라우저 에서 추가(Add) 를 클릭하고 입력(Input) > 포스 피드백 이펙트(Force Feedback Effect) 를 선택합니다. 방금 생성한 에셋을 엽니다.
-
기본적으로 이 에셋에는 하나의 채널이 있지만, 채널을 더 추가할 수 있습니다. 각 채널에서 그 채널의 이펙트가 될 4개 출력의 조합을 선택합니다.
-
Shift 를 누른 상태로 커브를 왼쪽 마우스 버튼 으로 클릭하여 하나 이상의 키를 추가합니다.
-
직접 값을 입력하거나 커브 에디터에서 키를 드래그하여 키를 조작합니다.
키 사이의 커브를 조정하려면 커브 세그먼트를 우클릭하여 커브 함수를 변경한 다음, 탄젠트 선을 조정합니다.
포스 피드백 재생하기
에디터에서 프리뷰
마우스를 올리면 포스 피드백 이펙트 아이콘의 중앙에 나타나는 '재생' 버튼을 클릭하여 에디터에서 포스 피드백 이펙트를 프리뷰할 수 있습니다.
플레이어 컨트롤러에 바로 액세스
포스 피드백은 베이스 PlayerController 클래스에서 구현됩니다. 타깃 디바이스나 컨트롤러에서 포스 피드백을 재생하려면, 로컬 플레이어 컨트롤러에 액세스해야 합니다.
블루프린트에서 포스 피드백 재생하기
-
Get Player Controller 노드나 저장된 레퍼런스를 통해 플레이어 컨트롤러에 대한 레퍼런스를 가져옵니다.
-
레퍼런스의 출력 핀을 드래그한 다음, 컨텍스트 메뉴에
Play Force Feedback을 입력하고 Client Play Force Feedback 을 선택합니다.
서버에서 호출된 경우 포스 피드백은 소유 클라이언트에 리플리케이트됩니다.
-
노드에 바로 지정하거나 변수로 연결해서 사용할 포스 피드백 이펙트를 지정합니다.
-
이펙트를 루핑하려면 루핑(Looping) 에 체크합니다.
-
필요에 따라, 태그(Tag) 필드에 이펙트의 고유한 이름을 설정할 수 있습니다. 이 기능을 사용하여 이펙트를 중지할 수 있는데, 같은 이름의 이펙트가 재생 중이면 그 이펙트는 중지되고 대신 새 이펙트가 재생됩니다.
C++에서 포스 피드백 재생하기
로컬 플레이어 컨트롤러에서 ClientPlayForceFeedback을 호출할 수 있습니다.
void ClientPlayForceFeedback
(
class UForceFeedbackEffect * ForceFeedbackEffect,
FForceFeedbackParameters Params
)
그런 다음, 포스 피드백 이펙트를 사용하고 이펙트 루프 여부를 지정하고 필요에 따라 이펙트 이름을 선택할 수 있습니다. 이름을 지정하고 원래 이펙트가 끝나기 전에 같은 이름의 다른 포스 피드백 이펙트가 재생되면, 원래 이펙트는 즉시 중지되고 대신 새 이펙트가 재생됩니다.
월드 위치에서
원하는 소스 이펙트의 월드 위치에 포스 피드백 컴포넌트를 배치할 수 있습니다. 그러면 관찰하는 플레이어와의 거리에 따라 강도가 변하는 포스 피드백 이펙트가 재생됩니다.
포스 피드백 컴포넌트는 명령 시 포스 피드백 이펙트를 재생하지만, 월드에 물리적 위치도 가지고 있습니다. 사운드나 라이트와 마찬가지로, 플레이어가 경험하는 포스의 강도도 데이터로 정의된 어테뉴에이션 세팅에 따라 포스 소스로부터의 플레이어의 거리를 기반으로 변합니다.
포스 피드백 컴포넌트는 소스 코드나 블루프린트를 통해 원하는 액터에 어태치할 수 있으며, 게임플레이 도중에 동적으로 추가할 수 있습니다. 다음과 같은 유틸리티 함수도 사용할 수 있습니다.
UGameplayStatics::SpawnForceFeedbackAtLocation: 주어진 월드 위치에 스폰UGameplayStatics::SpawnForceFeedbackAttached: 기존의 특정 컴포넌트에 어태치
이러한 함수는 스폰된 포스 피드백 컴포넌트를 반환하므로 계속해서 컴포넌트를 조작할 수 있습니다. 하지만, 이펙트 재생이 끝난 후 더는 그 컴포넌트를 사용하지 않는다면, 이펙트가 끝난 후 자동 소멸(Auto Destroy) boolean 옵션을 사용하여 컴포넌트를 제거합니다.