GameInput의 힘 피드백

이 항목을 사용하여 GameInput의 힘 피드백이 장치 출력을 관리하는 방법을 이해합니다. 힘 피드백을 통해 게임 입력 장치는 하나 이상의 장치 입력 컨트롤을 물리적으로 이동하여 사용자에게 촉각 피드백을 제공할 수 있습니다. 힘 피드백은 드라이빙 휠, 비행 시뮬레이션 장치 등 차량 운영을 시뮬레이션하는 입력 장치에서 작동합니다. 이러한 장치에는 축보다 컨트롤러에 힘을 적용하는 힘 피드백 모터가 있습니다. 레이싱 휠에서는 휠을 돌려 게임 내 시나리오를 시뮬레이션하는 회전력이 됩니다. 비행 스틱에서 힘 피드백을 사용하여 특정 위치에서 레버를 밀거나 잡아당기기가 어렵게 만듭니다.

힘 피드백을 지원하는 GameInput 인터페이스에 대한 자세한 내용은 IGameInputDeviceIGameInputForceFeedbackEffect를 참조하세요.

힘 피드백 모터 확인

힘 피드백 효과를 만들려면 효과를 적용할 입력 장치를 나타내는 IGameInputDevice 인터페이스가 필요합니다. IGameInputDevice 인터페이스를 확보한 후 GameInputDeviceInfo 구조체를 검사하여 장치에서 힘 피드백 모터 수를 확인합니다. 이 작업은 IGameInputDevice::GetDeviceInfo를 호출하여 수행할 수 있습니다. 입력 장치에 힘 피드백 모터가 있으면 GameInputDeviceInfo 멤버 ForceFeedbackMotorCount의 값이 1 이상입니다.

힘 피드백 효과 만들기

장치의 GameInputDeviceInfo 구조체에 하나 이상의 힘 피드백 모터가 있는 것으로 표시되면 다음 코드와 같이 IGameInputDevice::CreateForceFeedbackEffect를 호출하여 장치에 대한 힘 피드백 효과를 만듭니다.

HRESULT CreateForceFeedbackEffect(  
         uint32_t motorIndex,  
         const GameInputForceFeedbackParams* params,  
         IGameInputForceFeedbackEffect** effect  
) 

모터 인덱스 매개 변수는 힘 피드백의 영향을 받는 모터의 인덱스입니다. 이 인덱스는 GameInputDeviceInfo 구조체의 GameInputForceFeedbackMotorInfo 배열에 있는 적절한 모터에 해당됩니다. 이 배열에는 현재 존재하는 힘 피드백 모터 및 해당 기능에 대한 정보가 포함되어 있습니다.

두 번째 매개 변수에서는 다음 코드와 같이 효과의 특징을 설명하는 힘 피드백 효과에 대해 GameInputForceFeedbackParams 구조체를 작성합니다.

typedef struct GameInputForceFeedbackParams {  
    GameInputForceFeedbackEffectKind kind;  
    union  
    {  
        GameInputForceFeedbackConstantParams constant;  
        GameInputForceFeedbackRampParams ramp;  
        GameInputForceFeedbackPeriodicParams sineWave;  
        GameInputForceFeedbackPeriodicParams squareWave;  
        GameInputForceFeedbackPeriodicParams triangleWave;  
        GameInputForceFeedbackPeriodicParams sawtoothUpWave;  
        GameInputForceFeedbackPeriodicParams sawtoothDownWave;  
        GameInputForceFeedbackConditionParams spring;  
        GameInputForceFeedbackConditionParams friction;  
        GameInputForceFeedbackConditionParams damper;  
        GameInputForceFeedbackConditionParams inertia;  
    };  
} 

GameInputForceFeedbackEffectKind 열거형을 선택하고 해당 GameInputForceFeedbackParams 구조체를 초기화합니다.

예를 들어 스프링 동작이 있는 피드백 효과를 만들려면 GameInputForceFeedbackParams는 스프링에 대한 GameInputForceFeedbackEffectKindGameInputForceFeedbackSpringGameInputForceFeedbackConditionParams 구조체로 구성됩니다. 선택한 GameInputForceFeedbackEffectKind 열거형에 대한 매개 변수를 입력합니다.

인덱스에 따라 힘 피드백 모터 효과를 선택하고 GameInputForceFeedbackParams 구조체를 만든 후 IGameInputDevice::CreateForceFeedbackEffect를 호출하여 효과를 만듭니다. 이 효과는 IGameInputForceFeedbackEffect 인터페이스로 표시됩니다.

힘 피드백 효과의 수명은 생성된 IGameInputForceFeedbackEffect 인터페이스와 관련이 있습니다. 효과를 만들면 장치에 로드됩니다. 마지막 참조를 해제하면 힘 피드백 효과가 중지되고 장치 모터에서 언로드됩니다.

힘 피드백 효과 적용 및 업데이트

포스 피드백 효과를 만들면 장치 모터로 직접 로드됩니다. 힘 피드백 모터는 메모리의 양이 제한적입니다. 따라서 동시에 로드되고 플레이되는 힘 피드백 효과의 수가 제한됩니다. 이 한도에 도달한 후 IGameInputDevice::CreateForceFeedbackEffect를 호출하면 함수에서 오류가 발생합니다.

힘 피드백 효과를 만들면 중지된 상태로 힘 피드백 모터에 로드됩니다. 로드된 후 IGameInputForceFeedbackEffect 인터페이스를 사용하여 Running(으)로 효과의 상태를 설정합니다. 그러면 장치 모터에서 효과가 플레이됩니다.

힘 피드백 효과의 상태

힘 피드백 효과는 게임의 현재 상태와 일치 하도록 여러 상태를 이동합니다. 게임에 따라 효과의 상태를 업데이트하고 기록하여 원하는 동작을 유지 관리하는 것이 중요합니다.

다음 코드와 같이 GameInputFeedbackEffectState에 따라 힘 피드백의 상태를 설정할 수 있습니다.

typedef enum GameInputFeedbackEffectState    
{  
    GameInputFeedbackStopped = 0,  
    GameInputFeedbackRunning = 1,  
    GameInputFeedbackPaused = 2  
} GameInputFeedbackEffectState  

힘 피드백 효과를 만들면 Stopped 상태로 변경됩니다. 새 피드백 효과 또는 중지된 피드백 효과를 Running 상태로 설정하면 효과의 처음부터 플레이됩니다. 상태를 Paused(으)로 설정하면 힘 피드백 효과가 모터에 영향을 주지 않게 됩니다. 그러나 Paused 상태 효과를 Running(으)로 설정하면 힘 피드백 효과가 중단되었던 효과 패턴을 적용합니다.

효과를 중지하면 효과가 종료되지만 나중에 효과를 다시 트리거할 수 있습니다. 예를 들면 사용자가 레이싱 게임에서 거친 지형을 떠나는 경우가 있습니다. 마찬가지로 효과 일시 중지는 게임 플레이가 변경되지는 않지만 사용자가 일시 중지 메뉴와 같은 UI를 탐색하려는 경우에 유용합니다.

IGameInputForceFeedbackEffect::SetState를 호출하여 힘 피드백 효과의 상태를 설정합니다.

힘 피드백 효과 업데이트

새로운 GameInputForceFeedbackParams 구조체가 동일한 GameInputForceFeedbackEffectKind 열거형을 공유하는 경우 힘 피드백 효과의 게인을 조정하거나 새 매개 변수 집합을 제공합니다.

게인

다음 코드와 같이 IGameInputForceFeedbackEffect::SetGain 함수로 게인을 조정하여 힘 피드백 효과의 강도를 변경합니다.

void SetGain(  
         float gain  
)  

게인은 0에서 1 사이의 값이 될 수 있습니다. 기본적으로 힘 피드백 효과의 게인은 1로 설정됩니다. 이 기능은 주로 효과의 강도를 완화하는 데 사용됩니다.

새 매개 변수 설정

다음 코드와 같이 IGameInputForceFeedbackEffect::SetParams 함수를 사용하여 힘 피드백 효과에 새 매개 변수를 제공합니다.

bool SetParams(  
         const GameInputForceFeedbackParams* params  
)  

이 함수를 사용하여 힘 피드백 효과의 매개 변수를 대체할 경우 매개 변수를 설정하는 힘 피드백 효과와 동일한 GameInputForceFeedbackEffectKind 열거형을 사용합니다. 새 매개 변수는 바로 사용되며 실행 중인 효과를 중지하지 않고 적용됩니다. 기간 값이 변경되지 않으면 기간 타이머가 새로 고쳐지지 않습니다. 다른 기간 값을 입력하거나 효과를 중지했다가 다시 시작하는 경우에만 새로 고쳐집니다.

실행 중인 효과가 중지되면 새 매개 변수를 사용하여 다시 시작됩니다. GameInputForceFeedbackConstantGameInputForceFeedbackEffectKind 열거형으로 피드백 효과에 대한 매개 변수를 설정하면 일부 게임에서 매개 변수를 변경하여 다양한 피드백 패턴을 시뮬레이션할 수 있습니다.

GIP와 HID 장치 간의 기능 차이

콘솔에서 모든 장치는 GIP 드라이버 모델을 사용합니다. PC에서 장치는 GIP 또는 HID 드라이버 모델 중 하나를 사용할 수 있습니다. 공급업체 드라이버를 설치하면 일반적으로 HID 모드로 변환됩니다(수동 제어를 위한 실제 스위치가 없는 경우). HID 장치의 힘 피드백 기능은 원래 설계 목적인 DirectInput API에 의해 제한됩니다. GameInput은 가능한 경우 이러한 제한 사항을 해결하기 위해 최선을 다합니다. 그럼에도 불구하고 몇 가지 차이점은 남아 있습니다.

HID 장치는 하드웨어에서 지원하는 추가 축에 관계없이 현재 힘 피드백을 AngularX 축으로 제한합니다. 이 구성은 대다수의 레이싱 휠을 잘 지원합니다.

HID 힘 피드백은 현재 19H2 이상 버전의 Windows에서 사용할 수 있으며 향후 업데이트에서 19H1에서도 작동하도록 업데이트될 예정입니다.

참고 항목

IGameInputForceFeedbackEffect

IGameInputDevice