디바이스 프로퍼티(Device Properties) 는 라이트 컬러 디스플레이나 햅틱 트리거 저항과 같은 입력 디바이스의 다양한 물리적 프로퍼티를 나타냅니다. 디바이스 프로퍼티는 다음 방법으로 활성화할 수 있습니다.
-
디바이스 프로퍼티 카테고리에서 기존 포스 피드백 에셋에 추가합니다.
-
버스트(Burst) 게임플레이 큐 노티파이(Gameplay Cue Notify) 블루프린트 에서 활성화합니다.
-
입력 디바이스 서브시스템(Input Device subsystem) 에서 활성화합니다.
서드 파티 벤더가 제작한 디바이스를 옵션으로 추가할 수 있도록 디바이스 목록이 환경설정 파일로 채워집니다. 기본적으로 모든 콘솔을 지원합니다. 에디터에서 프로젝트 세팅(Project Settings) > 입력(Input) > 플랫폼 세팅(Platform Settings) > (플랫폼(Platform) ) > 하드웨어(Hardware) 로 이동하여 이러한 환경설정 세팅을 확인할 수 있습니다.
예를 들어, PS5에는 DualSense 또는 DualShock4 옵션이 있을 수 있습니다.
보유한 총의 타입에 따라 입력 트리거에 햅틱 저항을 적용하거나, 특수 이펙트의 시간이 지남에 따라 라이트 컬러를 변경하는 등 다양한 게임플레이 요소를 적용할 수 있습니다.
입력 디바이스 서브시스템은 블루프린트 또는 C++에서 사용할 수 있으며, 기능은 다음과 같습니다.
-
'가장 최근에 사용한 하드웨어 디바이스'를 가져오는 등 컨트롤러 입력 기능을 생성할 수 있습니다.
-
사용자가 키보드에서 컨트롤러로 전환하는 등 입력 디바이스를 변경했을 때 일반 UI 플러그인을 사용하지 않고도 PC 또는 콘솔에서 반응형 유저 인터페이스를 만들기 위한 OnInputHardwareDeviceChanged 델리게이트의 리스너를 지원합니다.
디바이스 프로퍼티의 수명
디바이스 프로퍼티는 노출된 가상 함수로 커스터마이징할 수 있는 간단한 수명을 가집니다. 각 디바이스 프로퍼티에는 포스 피드백 이펙트의 경과시간 어트리뷰트와 동일한 경과시간 이 있습니다. 프로퍼티의 경과시간이 끝나면 활성화 되고, 평가 되고, 적용 된 다음 리셋 됩니다.
| 함수 | 설명 |
|---|---|
Evaluate Device Property() |
디바이스 프로퍼티의 데이터를 변경하기 위해 EvaluateDeviceProperty() 함수를 오버라이드합니다. 이 함수는 틱마다 호출되며 시간에 따른 커브 타입의 값과 같은 상태 변경사항을 얻을 수 있도록 현재 경과시간에 대한 액세스를 제공합니다. |
Apply Device Property() |
프로퍼티 내부가 플랫폼 코드에 전달되는 방식을 변경하려면 이 함수를 오버라이드합니다. |
Reset Device Property() |
디바이스 프로퍼티의 경과시간이 끝나면 호출됩니다. 라이트 컬러를 처음 적용했을 때의 상태로 리셋하는 등 디바이스 프로퍼티에 적용한 상태 변경사항을 리셋하기 위해 이 함수를 사용할 수 있습니다. |
입력 디바이스 사용법
어떤 입력 디바이스 프로퍼티를 사용할지 파악한 후, 입력 디바이스 서브시스템 으로 활성화 할 수 있습니다. 디바이스 프로퍼티를 활성화하면, 입력 디바이스 프로퍼티 핸들 이 제공됩니다. 이 핸들을 사용해 입력 디바이스 서브시스템에서 프로퍼티의 현재 상태를 가져오거나, 필요에 따라 제거 또는 리셋하는 데 사용할 수 있습니다.
프로퍼티를 활성화하기 위해 사용할 수 있는 FActivateDevicePropertyParams 구조체의 환경설정 가능 옵션이 몇 가지 있습니다.
| 구조체 프로퍼티 변수 | 설명 |
|---|---|
| 사용자 ID(User Id) | 입력 디바이스를 설정하려는 소유 플레이어의 플랫폼 사용자 ID입니다. |
| 디바이스 ID(Device Id) | 이 프로퍼티를 활성화할 특정 입력 디바이스의 ID입니다. 명시적으로 설정하지 않은 경우, 주어진 사용자 ID의 디폴트 디바이스를 사용합니다. |
| 루핑(Looping) | 수명이 다한 후에 이 프로퍼티가 루프해야 하는지 여부입니다. |
| 시간 재생속도 조절 무시(Ignore Time Dilation) | true인 경우, 이 프로퍼티가 평가될 때 모든 시간 재생속도 조절을 무시합니다. |
| 일시정지 시 플레이(Play while paused) | 게임이 일시정지되어도 이 프로퍼티가 적용되어야 할지 여부입니다. |
C++
C++의 입력 디바이스 서브시스템을 사용하여 입력 디바이스 프로퍼티를 수동으로 활성화할 수 있습니다.
ManualExample.h
| // 헤더 파일 내용
// 인스턴스화된 디바이스 프로퍼티입니다. 디테일 패널에서 프로퍼티를 편집하려는 경우에 사용하세요.
UPROPERTY(EditDefaultsOnly, Instanced, BlueprintReadOnly, Category = "Input Devices")
TObjectPtr<UInputDeviceProperty> DevicePropertyInstance;
// 디테일 패널에서 편집하려는 프로퍼티가 없는 경우에는 서브클래스를 사용해도 됩니다
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Input Devices")
TSubclassOf<UInputDeviceProperty> DevicePropertClass; |
ManualExample.cpp
| // cpp 파일 내용
#include "GameFramework/InputDeviceSubsystem.h"
#include "GameFramework/InputDeviceProperties.h"
**void** ApplyProperties()
{
**const** FPlatformUserId UserId = GetOwningUserId();
**if** (UserId.IsValid())
{
**if** (UInputDeviceSubsystem* InputDeviceSubsystem = UInputDeviceSubsystem::Get())
{
FActivateDevicePropertyParams Params = {};
Params.UserId = UserId;
// 기본적으로 디바이스 프로퍼티는 플랫폼 사용자의 기본 입력 디바이스에서 플레이됩니다.
// 이를 오버라이드하고 특정 디바이스로 설정하려면, DeviceId 파라미터를 설정할 수 있습니다.
//Params.DeviceId = <특정 device id>;
// 주어진 인스턴스화된 프로퍼티를 사용하고 이를 수정합니다. 주의해서 사용하세요.
FInputDevicePropertyHandle Handle = InputDeviceSubsystem->ActivateDeviceProperty(DeviceProp, Params);
// 이 디바이스 프로퍼티 클래스의 새 인스턴스를 생성해서 사용합니다.
FInputDevicePropertyHandle Handle = InputDeviceSubsystem->ActivateDevicePropertyOfClass(DeviceProp, Params);
}
}
}
|
무기의 장착 및 장착 해제에 따라 디바이스 프로퍼티가 적용되는 예시를 보려면 라이라 게임 샘플의 LyraWeaponInstance.cpp를 참고하세요.
블루프린트
커스텀 게임플레이 경험을 생성하기 위해 디바이스 프로퍼티를 사용하여 나만의 블루프린트를 만들 수 있습니다. 예를 들어, 라이라 게임 샘플의 B_TeamColor_DeviceProperty 변수를 사용해 컨트롤러의 라이트 컬러를 팀 색(빨간색 또는 파란색)과 일치하도록 설정할 수 있습니다.
디바이스 프로퍼티 시스템에 블루프린트 스크립트를 사용하는 라이라 게임 샘플 예시입니다.
해로운 오브젝트 참조를 방지하기 위해 블루프린트 코드는 서브클래스 타입만 사용할 수 있습니다. 즉, 사용 사례에 맞는 특정 디바이스 프로퍼티 블루프린트를 만들어야 합니다.
입력 디바이스 프로퍼티를 수동으로 제거하려면 서브시스템에 RemoveDevicePropertyHandles() 함수를 호출합니다.
포스 피드백 에셋
플레이어에게 적용하려는 기존 포스 피드백 에셋에 디바이스 프로퍼티를 추가해 활성화할 수 있습니다. 디테일(Details) > 디바이스 프로퍼티(Device Properties) 카테고리로 이동하여 추가하고 활성화하면 됩니다.
버스트 게임플레이 이펙트 큐
디테일(Details) > GCN Effects > Burst Effects > Burst Device Property Effect > Device Properties 로 이동해 게임플레이 큐 노티파이 버스트(Gameplay Cue Notify Burst) 가 적용되었을 때 활성화할 입력 디바이스 프로퍼티를 지정할 수 있습니다.
디버깅
현재 활성화된 디바이스 프로퍼티에 대한 정보를 화면에 표시하려면 물결표 키(~)를 눌러 콘솔을 열고 콘솔 명령을 사용합니다.
| showdebug DeviceProperty |
showdebug DeviceProperty 명령을 콘솔에 입력합니다.
이 명령은 현재 활성화된 디바이스 프로퍼티에 대한 디버그 정보를 뷰포트에 표시합니다. 디바이스가 활성화되었을 때 사용된 플래그, 적용 중인 입력 디바이스의 ID, 디바이스가 활성화된 기간이 표시됩니다.
새 하드웨어 프로퍼티 생성
Engine 모듈의 UInputDeviceProperty 는 ApplicationCore 모듈에 선언된 로우 레벨 FInputDeviceProperty 구조체의 추상화를 제공합니다. FInputDeviceProperty 는 각 프로퍼티의 구현이 처리되는 플랫폼 코드에 전달됩니다.
새 개발 키트가 출시되면, 해당 하드웨어의 IInputDevice 또는 IInputInterface 에 SetDeviceProperty() 함수를 오버라이드해서 여러 입력 디바이스 프로퍼티로 지원을 추가할 수 있습니다.
FInputDeviceProperty 의 새 서브클래스를 추가하는 경우, 특정 디바이스용으로 만들어서는 안 되며 NDA를 위반하지 않고 엔진 내 어디서나 참조할 수 있도록 추가해야 합니다. 프로젝트용 하드웨어가 있다면 프로젝트 코드 내에서 선언합니다.