Documentazione di Steamworks
Layer di set di azioni
I layer di set di azioni sono set opzionali di assegnazioni di azioni che possono essere sovrapposti ai set di controlli esistenti. Differentemente dai set di azioni, i layer ricavano i comandi dal set di cui fanno parte e, quando applicati, non sostituiscono integralmente quanto già attivo, ma apportano piuttosto piccole modifiche. Può trattarsi di modifiche delle impostazioni o dell'aggiunta o rimozione di comandi dal set di azioni di base. È possibile applicare più di un layer alla volta, che verrà applicato consecutivamente.

Tecnicamente non vi è alcun limite al numero di layer che possono essere attivi in contemporanea. Dal punto di vista pratico, tuttavia, la presenza di un numero eccessivo di layer nel configuratore può causare confusione nei giocatori.

Ricorda che:
  • L'attivazione di un set di azioni già attivo non avrà alcun effetto sui suoi layer.
  • L'attivazione di un nuovo set di azioni cancellerà tutti i layer attivi dal vecchio set.
  • L'attivazione di un layer di set di azioni già attivo non avrà alcun effetto.
  • L'attivazione di un layer di set di azioni già attivo non modificherà il relativo ordine di sequenza.
  • La disattivazione e riattivazione di un layer di set di azioni lo imposterà in cima alla sequenza.
  • La chiamata ActivateActionSetLayer richiede pochissime risorse ed è ripetibile in sicurezza (ma leggi il riquadro qui sotto)

    Attenzione con i layer multipli!

    Solo perché puoi riapplicare i layer di set di azioni per ogni frame non significa che devi, specialmente se stai utilizzando più di un layer. L'ultimo layer applicato sovrascriverà le informazioni in conflitto precedentemente salvate, quindi presta particolare attenzione nell'applicarli nell'ordine corretto. Nel codice potrebbero facilmente verificarsi situazioni di corsa o altri bug di sincronizzazione minori in grado di modificare l'ordine.

    I layer di set di azioni sono progettati per casi d'uso ristretti. Una buona pratica è di applicarli e rimuoverli solo in corrispondenza di specifici cambiamenti di stato del gioco.

    Per i giochi con supporto nativo dell'Input di Steam, lo sviluppatore può definire specifici layer di set di azioni attivati dal codice del gioco. Inoltre, in modalità legacy, i giocatori possono definire i propri layer di set di azioni e gli input che li attivano, così come possono definire dei set di azioni attivati dal giocatore.

    Esempio pratico


    Immagina un gioco sparatutto con veicoli basato su classi, che abbia il supporto nativo dell'input di Steam e faccia uso dei layer di set di azioni. Per l'attività di gioco di base, un set di azioni di base è sempre attivo e copre il movimento, la raccolta di oggetti, il salto ecc.

    action_set_layers_basic_1.png

    Quando il giocatore seleziona una classe, viene aggiunto il layer appropriato, ad esempio "Cecchino".

    action_set_layers_sniper_2.png

    Per questa impostazione il codice ha un aspetto simile a questo:

    void changeClass(EClassID myClass) { if(myClass == SNIPER) { SteamInput()->ActivateActionSetLayer( controllerHandle1, sniperLayerHandle ); } //logica per le altre classi }

    Se il giocatore entra o esce da un veicolo, i comandi per il layer si attivano e disattivano in corrispondenza di tali cambiamenti di stato, aggiungendo o rimuovendo i nuovi comandi per le funzioni specifiche dei veicoli.

    action_set_layers_vehicle_1.png

    void changeVehicle(EVehicleID myVehicle, bool entering) { InputActionSetHandle_t layerHandle; if(myVehicle == AUTOMATIC) { layerHandle = automaticHandle; //cambio automatico -- sterza, accelera, frena } else if(myVehicle == STICK_SHIFT) { layerHandle = stickShiftHandle; //cambio manuale -- sterza, accelera, frena, frizione, cambio marce, ecc. } if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, layerHandle ); //applica il layer di azione quando entri nel veicolo } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, layerHandle ); //rimuovi il layer di azioni all'uscita del veicolo } }

    Il gioco prevede che i giocatori possano utilizzare le armi anche quando sono alla guida di un veicolo. In questo modo, quando il cecchino utilizza il mirino del fucile, questo attiva un terzo layer di set di azioni indipendentemente dal fatto che il giocatore sia a piedi o alla guida di un veicolo.

    action_set_layers_scope.png

    void useScope(bool entering) { if(entering) { SteamInput()->ActivateActionSetLayer( controllerHandle1, scopeHandle ); //applica il layer del mirino quando lo utilizzi } else { SteamInput()->DeactivateActionSetLayer( controllerHandle1, scopeHandle ); //rimuovi il layer del mirino quando non lo utilizzi } }

    Ecco come si combinano tutti i layer.

    action_set_layers_result_2.png

    Nota il modo in cui i layer non solo possono aggiungere nuove azioni sui layer esistenti, ma possono anche sostituire le precedenti assegnazioni. In questo caso, le azioni specifiche del veicolo "frena" e "accelera" sovrascrivono le azioni del layer di base "salta" e "interagisci", mentre "guida" sovrascrive l'azione "muoviti" assegnata al trackpad e al joystick nel layer di base e viene sovrascritta a sua volta dall'azione "mira" del layer di set di azioni per mirare. Quando tutti e tre i layer di set di azioni sono posti in cima alla sequenza, l'unica azione rimanente del set di base è "spara".

    Modalità legacy


    I layer di set di azioni possono essere creati quasi esattamente come i normali set di azioni. Fai semplicemente clic sul pulsante "Aggiungi un layer di azioni" nel configuratore:

    add_action_layer.png

    Da qui puoi assegnare un nome al layer di set di azioni e specificare i relativi comandi. Dato che si tratta di un layer di set di azioni di tipo legacy, il gioco non sarà in grado di rilevarlo e il giocatore dovrà procedere all'attivazione manuale. Scegli l'input che deve azionare il layer di set di azioni e apri il menu dei comandi, quindi fai clic sull'icona speciale di attivazione del set di azioni all'estrema sinistra:

    bind_action_set.png

    Verrai portato al menu di attivazione del set di azioni:

    change_action_set.png

    In questo caso il nostro scopo è quello di applicare un layer, non di attivare un set di azioni. Seleziona "Applica layer di azioni" dal menu a tendina:

    apply_action_set_layer.png

    Infine, è necessario selezionare il layer da applicare:

    select_action_set_layer.png

    Per assegnare un comando separato per rimuovere il layer, puoi utilizzare la stessa procedura.