Steamworks 문서
동작 세트 레이어
동작 세트 레이어는 기존의 동작 세트에 덮어쓸 수 있는 선택적인 동작 바인딩 세트입니다. 동작 세트와 반대로, 레이어는 내장된 동작 세트로부터 동작을 추출하기 때문에 이미 활성화된 동작을 완전히 덮어쓰지는 않지만 일부 변경이 적용됩니다. 레이어는 설정을 변경하는 것에서 기본 동작 세트에 바인딩을 추가하거나 제거하는 것까지 포함합니다. 한 번에 한 개 이상의 레이어를 적용할 수 있으며 연속적으로 적용됩니다.

기술적으로 한 번에 활성화할 수 있는 레이어 수에 제한은 없으나 구성에 너무 많은 레이어를 추가하면 사용자에게 혼란을 줄 수 있습니다.

참고:
  • 이미 활성화되어 있는 동작 세트는, 활성화하더라도 레이어에 아무런 영향을 주지 않습니다.
  • 새로운 동작 세트를 활성화하면 기존 세트에 활성화되어 있는 모든 레이어가 사라집니다.
  • 이미 활성화되어 있는 동작 세트 레이어는, 활성화하더라도 아무런 영향을 주지 않습니다.
  • 이미 활성화된 동작 세트 레이어는, 활성화하더라도 스택 순서가 달라지지 않습니다.
  • 활성화된 동작 세트 레이어를 비활성화했다가 다시 활성화하면 스택의 맨 위로 이동합니다.
  • ActivateActionSetLayer는 저렴하고 안전하게 반복적으로 호출할 수 있습니다(아래 호출을 확인하십시오).

    다중 레이어에 주의하세요!

    동작 세트 레이어를 매 프레임마다 반복 적용할 수 있다고 해서 반드시 그렇게 해야 하는 것은 아닙니다. 특히 레이어를 한 개 이상 사용할 경우 더욱 그렇습니다. 마지막에 적용되는 레이어가 바로 전 레이어와 충돌하는 정보를 무효화하기 때문에 올바른 순서로 적용하도록 특별히 주의하시기 바랍니다. 코드에 순서를 바꿀 수 있는 경쟁 조건 또는 다른 미묘한 타이밍 버그가 얼마든지 존재할 수 있습니다.

    동작 세트 레이어는 일부 사용 사례를 위한 것으로, 특정 게임 상태를 변경해야 할 때만 적용하거나 제거하는 것이 좋습니다.

    Steam Input을 기본 지원하는 게임은 개발자가 게임의 코드를 사용하여 특정 동작 레이어의 활성화를 정의할 수 있습니다. 또한 사용자는 플레이어가 트리거한 동작 세트를 정의할 수 있는 것과 마찬가지로, 레거시 모드에서 나만의 동작 세트 레이어와 이를 트리거하는 입력을 설정할 수 있습니다.

    실제 예시


    차량을 사용하는 클래스 기반의 슈팅 게임을 생각해 봅시다. 이 게임은 기본 Steam Input 지원이 있으며 동작 세트 레이어를 활용합니다. 일반적인 게임 플레이에서는 기본 동작 세트가 항상 활성화되어 있으며 돌아다니기, 아이템 줍기, 점프 및 기타 등을 조작합니다.

    action_set_layers_basic_1.png

    플레이어가 클래스를 선택하면 적절한 레이어(예: '저격수')가 추가됩니다.

    action_set_layers_sniper_2.png

    이 경우, 코드는 다음과 같습니다.

    void changeClass(EClassID myClass) { if(myClass == SNIPER) { SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle ); } //다른 클래스의 로직 }

    플레이어가 차량에 타거나 내리면, 상태 변화에 따라 차량 레이어에 대한 컨트롤이 활성화/비활성화되어 차량의 기능을 위한 새로운 컨트롤을 추가하거나 제거하게 됩니다.

    action_set_layers_vehicle_1.png

    void changeVehicle(EVehicleID myVehicle, bool entering) { InputActionSetHandle_t layerHandle; if(myVehicle == AUTOMATIC) { layerHandle = automaticHandle; //자동 변속기 -- 핸들, 가속 페달, 브레이크 } else if(myVehicle == STICK_SHIFT) { layerHandle = stickShiftHandle; //수동 변속기 -- 핸들, 가속 페달, 브레이크, 클러치, 변속 기어 등. } if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, layerHandle ); //차량에 탔을 때 차량의 동작 세트 레이어 적용 } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, layerHandle ); //차량에서 내렸을 때 차량의 동작 세트 레이어 제거 } }

    이 게임에서 플레이어는 차량을 타고 다니는 동안에도 무기를 사용할 수 있습니다. 그러므로 저격수가 저격용 소총의 조준기를 사용하면 사용자가 차를 타고 있는 것과 관계없이 세 번째 동작 세트 레이어가 활성화됩니다.

    action_set_layers_scope.png

    void useScope(bool entering) { if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //조준 시 조준 레이어 적용 } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //조준 해제 시 조준 레이어 제거 } }

    모든 레이어가 결합된 방식은 다음과 같습니다.

    action_set_layers_result_2.png

    레이어가 기존의 레이어에 새로운 동작을 추가할 수 있을 뿐 아니라 기존 바인딩을 덮어쓸 수도 있습니다. 여기서는 차량의 특정 동작인 '브레이크'와 '액셀'이 기본 레이어의 동작인 '점프'와 '사용하기' 동작을 덮어쓰고 있으며, 트랙패드와 조이스틱의 '방향 전환'과 '이동' 동작을 조준하기 동작 세트 레이어의 '조준' 동작이 덮어쓰고 있습니다. 세 개의 동작 세트 레이어가 맨 위에 스택 되면 기존 세트에서 남은 유일한 동작은 '사격'입니다.

    레거시 모드


    일반 동작 세트와 거의 동일한 방식으로 동작 세트 레이어를 생성합니다. 구성에서 '동작 레이어 추가' 버튼을 클릭합니다.

    add_action_layer.png

    이곳에서 동작 세트 레이어의 이름 및 바인딩을 지정할 수 있습니다. 레거시 동작 세트 레이어는 게임이 정보를 보유하지 않으므로 사용자가 직접 활성화해야 합니다. 어떤 입력으로 동작 세트 레이어를 실행할지 결정하고 할당 메뉴를 열어 가장 왼쪽의 특수 아이콘으로 표시된 동작 세트 활성화 아이콘을 클릭하세요.

    bind_action_set.png

    동작 세트 활성화 메뉴를 불러옵니다.

    change_action_set.png

    이번에는 동작 세트를 활성화하지 않고 레이어를 적용하겠습니다. 드롭다운 메뉴에서 '동작 레이어 적용'을 선택합니다.

    apply_action_set_layer.png

    마지막으로, 적용할 레이어를 선택합니다.

    select_action_set_layer.png

    같은 방법으로 개별 입력을 지정하여 레이어를 삭제할 수 있습니다.