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.
Quando il giocatore seleziona una classe, viene aggiunto il layer appropriato, ad esempio "Cecchino".
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.
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.
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.
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:
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:
Verrai portato al menu di attivazione del set di azioni:
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:
Infine, è necessario selezionare il layer da applicare:
Per assegnare un comando separato per rimuovere il layer, puoi utilizzare la stessa procedura.