L'Editor del Grafico di Animazione è uno strumento visivo basato su nodi che consente ad artisti tecnici e animatori di costruire logiche di animazione complesse direttamente all'interno di Roblox Studio. Fornendo un'interfaccia semplificata per creare comportamenti come gli alberi di fusione, rimuove la tradizionale dipendenza dalla scrittura manuale di script per il movimento dei personaggi.
Questo sistema funziona in tandem con il tuo flusso di lavoro di animazione esistente:
- Editor di Animazione: Continua a utilizzare l'Editor di Animazione come tuo strumento principale per la creazione di clip individuali e la messa a punto di fotogrammi chiave e curve.
- Editor del Grafico di Animazione: Usa questo strumento per prendere quelle clip e organizzarle in un albero logico per guidare comportamenti di gioco sofisticati.
Progettato per migliorare la collaborazione, il grafico visivo consente agli sviluppatori di ispezionare, eseguire il debug e comprendere rapidamente la logica creata dagli animatori. Mentre gli artisti si concentrano sul perfezionamento del movimento interattivo, gli sviluppatori possono comunque accedere ai nodi del grafico di animazione programmaticamente per un controllo diretto su animazioni e stati mescolati.
Costruire un grafico
Per iniziare a costruire la logica per un personaggio animabile, accedi all'editor del grafico di animazione tramite la scheda Avatar nel nastro di Studio. I seguenti passaggi dimostrano come inizializzare un rig e costruire una rete di nodi di base utilizzando le animazioni di camminata e saluto predefinite.
Per un approfondimento sulle applicazioni pratiche, puoi esplorare il File di Riferimento del Grafico di Animazione, che contiene sia esempi fondamentali che complessi di implementazione.
Per creare il tuo grafico di animazione, simile all'esempio di base fornito nel riferimento, utilizza i seguenti passaggi:
In Studio, aggiungi un rig animabile navigando nella scheda Avatar e selezionando Personaggio ⟩ Il mio Avatar.

Apri l'Editor del Grafico di Animazione navigando su Editor Grafico nella scheda Avatar.

Seleziona il rig animabile nella vista 3D e seleziona Crea Grafico.
Nell'Editor Grafico, fai clic con il tasto destro e seleziona Clip.

Nel nuovo nodo Clip, imposta l'ID dell'Animazione.
Seleziona il menu a discesa ID Animazione.
Per inviare un ID di asset di animazione specifico, fai clic su Importa.

Nel campo ID Animazione, aggiungi l'animazione di camminata predefinita: 507777826.
Seleziona Importa.
Aggiungi un altro nodo clip ripetendo i passaggi 4-5 utilizzando l'animazione di saluto predefinita: 507770239.

Nell'Editor Grafico, fai clic con il tasto destro e seleziona Aggiungi.

Collega i nodi Clip al nodo Aggiungi trascinando il connettore di uscita in alto a destra al porto appropriato:
- Collega il nodo Clip con l'animazione di camminata al porto Base.
- Collega il nodo Clip con l'animazione di saluto al porto Additivo.

Dal nodo Aggiungi, collega il connettore di uscita in alto a destra al porto di uscita del grafico Pose.

- OPZIONALEAssegna un parametro alla tua variabile Speed.
Fai clic e trascina il porto verde Speed in un'area vuota. Viene visualizzato un nuovo nodo parametro.

In alto a sinistra dell'editor grafico, utilizza il pannello dei parametri per modificare rapidamente i parametri nei tuoi nodi. Puoi anche accedervi programmaticamente.

Testa l'animazione premendo il pulsante di riproduzione.

Prova a testare vari pesi, velocità, modalità di riproduzione e altre animazioni. Per ulteriori informazioni sui nodi individuali, consulta il Riferimento ai Nodi.
Integrazione API
Creare e distribuire un Grafico di Animazione segue il pipeline di animazione standard di Roblox. Dopo aver selezionato un rig nell'Editor del Grafico di Animazione, viene creato un nuovo asset AnimationGraphDefinition. Questo asset funge da contenitore per i tuoi nodi, connessioni e parametri. Una volta che la tua logica è finalizzata, pubblichi il grafico per ricevere un ID Asset standard.
Nei tuoi script, interagisci con questi grafici caricandoli su un Animator come faresti con un'animazione tradizionale. Per guidare la logica interna del grafico, utilizza AnimationTrack:SetParameter() per passare valori in tempo reale, come la velocità di movimento o booleani di stato, direttamente nelle variabili del grafico.
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://123456789" -- Il tuo ID Grafico Pubblicato
local animationTrack = animator:LoadAnimation(animation)
animationTrack:Play()
-- Aggiornamenti dinamici dei parametri tramite RunService
game:GetService("RunService").Stepped:Connect(function(_, dt)
local currentSpeed = humanoidRootPart.AssemblyLinearVelocity.Magnitude
animationTrack:SetParameter("humanoidSpeed", currentSpeed)
end)Riferimento ai Nodi
Ogni nodo del grafico di animazione funge da porta logica o sorgente di dati che elabora i dati di animazione prima che raggiungano il rig del personaggio. Questa sezione fornisce una suddivisione tecnica dei blocchi funzionali all'interno dell'Editor del Grafico di Animazione. Tutti i nodi attualmente producono un pose di animazione.
Ogni sezione del nodo include:
- Definizione – Un riepilogo dello scopo e del ruolo del nodo all'interno del grafico.
- Ingressi – I flussi di dati che entrano nel nodo. Più ingressi sono rappresentati come Input1, Input2, ..., InputN.
- Proprietà di ingresso – Impostazioni legate direttamente a un ingresso specifico (un ingresso Idle assegnato a una Posizione di 0.5 su un nodo Blend1D).
- Dati Evento – Eventi emessi o consumati dal nodo per attivare la logica interna del grafico o script Luau esterni. Questo comportamento potrebbe cambiare nel corso dello sviluppo beta.
Regole degli eventi globali
Per tutti i nodi e transizioni, le seguenti regole si applicano per impostazione predefinita:
- Gli eventi si propagano verso l'alto dal loro nodo sorgente attraverso il grafico. Ogni evento porta un peso che rappresenta l'influenza della sua sorgente nella fusione finale. Se il peso raggiunge zero in qualsiasi punto, l'evento viene silenziato.
- I nodi senza logica di evento personalizzata passano tutti gli eventi attraverso senza modifiche; i nodi che fondono o selezionano tra ingressi possono scalare il peso o bloccare eventi da ingressi non primari (vedi sezione Evento per nodo).
- Gli eventi marker che raggiungono la parte superiore del grafico possono essere osservati tramite AnimationTrack:GetMarkerReachedSignal().
Clip

Un riferimento a un asset AnimationClip. Questo funge da nodo foglia nel grafico, generando i dati di animazione grezzi che alimentano altri nodi per la fusione, selezione o modifica.
- Ingressi
- Nessuno
- Proprietà
Proprietà Tipo Descrizione AnimationId String L'asset di animazione da riprodurre (ad es. rbxassetid://12345). PlayMode Enum.AnimationNodePlayMode Definisce il comportamento del clip una volta raggiunta la fine della sua durata.
- Loop (predefinito): Riavvia automaticamente dall'inizio una volta che il clip termina.
- PingPong: Riproduce dall'inizio alla fine, quindi riproduce immediatamente in reverse dall'estremità all'inizio.
- OnceAndHold: Riproduce una volta e mantiene la posa finale al termine.
- OnceAndReset: Riproduce una volta e torna alla posa iniziale al termine.
Reverse Boolean Controlla la direzione della riproduzione. Speed Number Un moltiplicatore per la velocità di riproduzione. 0.0 mette in pausa il grafico, 1.0 è la velocità normale e 2.0 è il doppio della velocità. Trim Boolean Attiva o disattiva se la durata del clip deve essere troncata. TrimStart Number Il timestamp assoluto (in secondi) in cui deve iniziare la riproduzione. TrimEnd Number Il timestamp assoluto (in secondi) in cui deve terminare la riproduzione. - Dati evento
- Gestione eventi: Nessuno. Questo è un nodo foglia senza figli.
- Emissione eventi: Legge marker personalizzati incorporati nel clip di animazione (ad es., "Footstep", "WeaponSwing") e li emette come eventi nominati al fotogramma preciso in cui si verificano. Se il clip è troncato, solo i marker all'interno dell'intervallo definito [TrimStart, TrimEnd] (inclusivo) vengono emessi.
Seleziona

Seleziona tra qualsiasi numero di ingressi tramite la proprietà Selezione. Ogni volta che la selezione corrente cambia, attiva una nuova transizione.
- Ingressi
- Input1...InputN
- Proprietà
Proprietà Tipo Descrizione Selection String L'ID unico dell'ingresso da selezionare, corrispondente al nome della connessione di ingresso (ad es., "Walk"). - Dati evento
- Gestione eventi: Gli eventi dall'ingresso attualmente selezionato passano attraverso con il loro peso invariato.
- Emissione eventi: Passa attraverso tutti gli eventi dall'ingresso attualmente selezionato solo. Durante una transizione, l'emissione degli eventi segue le regole degli eventi globali.
SelezionePrioritaria

Valuta un elenco di ingressi connessi dall'alto verso il basso e riproduce il primo il cui stato si valuta come vero. Questo consente una selezione gerarchica delle animazioni basata su logiche specifiche. Ogni volta che la selezione corrente cambia, attiva una nuova transizione.
- Ingressi
- Input1...InputN
- Trigger (Boolean): Una condizione logica che deve essere vera affinché questo ingresso si attivi. Nelle versioni attuali, questo è collegato a un parametro booleano.
- TransitionOverrideInterruptible (Enum.AnimationNodeInterruptible): Definisce la regola per quando questa animazione attiva può essere interrotta da un ingresso di priorità superiore. Sovrascrive l'impostazione DefaultInterruptible a livello di nodo.
- Always (predefinito): L'ingresso può essere interrotto in qualsiasi momento da una condizione di priorità superiore.
- Finished: L'animazione corrente deve completare la sua riproduzione prima che un ingresso di priorità superiore possa prendere il sopravvento.
- Trigger: L'ingresso è interrotto solo quando l'InterruptibleTrigger è impostato su vero.
- InterruptibleTrigger (Boolean): Disponibile solo se TransitionOverrideInterruptible è impostato su Trigger. L'ingresso può essere interrotto quando questa espressione specifica è vera.
- Proprietà
Proprietà Tipo Descrizione DefaultInterruptible Enum.AnimationNodeInterruptible La regola di interruzione di base applicata a tutti gli ingressi. Ogni ingresso può sovrascrivere questo con la propria proprietà di ingresso TransitionOverrideInterruptible. - Dati evento
- Gestione eventi: Gli eventi dall'ingresso attualmente selezionato passano attraverso con il loro peso invariato.
- Emissione eventi: Passa attraverso tutti gli eventi dall'ingresso attualmente selezionato solo. Durante una transizione, l'emissione degli eventi segue le regole degli eventi globali.
Sequenza

Attiva ingressi connessi in un ordine sequenziale specifico basato su condizioni di attesa definite. Ogni volta che la selezione corrente cambia, attiva una nuova transizione.
- Ingressi
- Input1...InputN
- TransitionOverrideWaitFor (Enum.AnimationNodeWaitFor): Specifica la condizione che deve essere soddisfatta prima che la sequenza avanzi al prossimo ingresso. Sovrascrive l'impostazione DefaultWaitFor a livello di nodo.
- Finished (predefinito): Avanza al prossimo ingresso quando l'ingresso corrente completa un ciclo. Il comportamento di avanzamento dipende dall'ingresso connesso:
- Clip da riprodurre una volta: Avanza quando il clip termina.
- Clip in loop: Avanza dopo che un ciclo completo è completato.
- Sequenza con loop infiniti: Avanza dopo un ciclo completo attraverso tutti gli ingressi.
- Sequenza con loop finiti: Avanza dopo che tutti i loop sono completati.
- Trigger: Attiva il prossimo ingresso quando un'espressione logica personalizzata si valuta come vera.
- WaitForTrigger (Boolean): Disponibile solo quando TransitionOverrideWaitFor è impostato su Trigger.
- Proprietà
Proprietà Tipo Descrizione LoopCount Number Il numero di volte per ciclare attraverso l'intera sequenza. Un valore di 0 (predefinito) indica un loop infinito. Una volta raggiunto il conteggio, il nodo rispetta l'impostazione di loop o hold dell'input finale. DefaultWaitFor Enum.AnimationNodeWaitFor La condizione di attesa di base applicata a tutti gli ingressi. Ogni ingresso può sovrascrivere questo con la propria proprietà di ingresso TransitionOverrideWaitFor. - Dati evento
- Gestione eventi: Gli eventi dall'ingresso attualmente attivo passano attraverso con il loro peso invariato.
- Emissione eventi: Passa attraverso tutti gli eventi dall'ingresso attualmente attivo nella sequenza solo. Durante una transizione, l'emissione degli eventi segue le regole degli eventi globali.
SequenzaCasuale

Seleziona e riproduce uno dei suoi ingressi connessi a caso. Quando l'animazione attualmente selezionata termina, il nodo sceglie casualmente un altro ingresso da riprodurre. Assegna a ciascun ingresso un peso specifico per influenzare la probabilità di essere scelto. Ogni volta che la selezione corrente cambia, attiva una nuova transizione.
- Ingressi
- Input1...InputN
- Weight (Number): Determina la probabilità di questo ingresso essere selezionato; pesi più alti aumentano la possibilità di selezione.
- Proprietà
Proprietà Tipo Descrizione PlayCount Number Il numero di ingressi che il nodo riprodurrà prima di fermarsi. Una volta raggiunto, il nodo rispetta l'impostazione di loop o hold dell'input finale. Il predefinito è 0 per infinito Seed Number Un valore utilizzato per inizializzare il Generatore di Numeri Casuali (RNG), assicurando che la sequenza rimanga coerente tra diversi client. Il predefinito è -1 per Seed casuale. - Dati evento
- Gestione eventi: Gli eventi dall'ingresso attualmente attivo passano attraverso con il loro peso invariato.
- Emissione eventi: Passa attraverso tutti gli eventi dall'ingresso attualmente attivo nella sequenza solo. Durante una transizione, l'emissione degli eventi segue le regole degli eventi globali.
Sopra

Sovrappone la posa Sopra alla posa Base. Quando combinato con un nodo Maschera, le articolazioni escluse nella posa Sopra rivelano completamente la posa Base, creando un effetto di sovrapposizione trasparente.
- Ingressi
- Base: Lo sfondo o il livello inferiore, tipicamente un'animazione a corpo intero come locomozione o uno stato di inattività.
- Sopra: Il primo piano o il livello superiore da applicare sulla base, come un gesto della mano o un'animazione di utilizzo di uno strumento.
- Proprietà
Proprietà Tipo Descrizione Weight Number Il peso di fusione utilizzato per attenuare la posa Sopra. Il predefinito è 1.0 (sovrascrittura completa) ed è non limitato. - Dati evento
- Gestione eventi:
- Il nodo ascolta gli eventi provenienti sia dagli ingressi Base che Sopra.
- Emissione eventi:
- Eventi Base: Tutti gli eventi dall'ingresso Base vengono passati attraverso senza modifiche.
- Eventi Sopra: Gli eventi dall'ingresso Sopra sono scalati dalla proprietà Weight.
- A Weight 0.5, gli eventi Sopra si propagano a metà peso
- A Weight 0, vengono silenziati.
Aggiungi

Aggiunge la posa Additiva alla posa Base, attenuata da un Weight specifico (non limitato).
- Ingressi
- Base: La posa di animazione principale.
- Additiva: La posa da sovrapporre alla base.
- Proprietà
Proprietà Tipo Descrizione Weight Number Determina la forza della posa additiva applicata alla base. - Dati evento
- Gestione eventi: Il nodo ascolta gli eventi provenienti sia dagli ingressi Base che Additiva.
- Emissione eventi: Tutti gli eventi provenienti sia dagli ingressi Base che Additiva vengono passati attraverso senza modifiche.
Sottrai

Converte un'animazione in una posa additiva sottraendo una posa base relativa dalla posa target (). Il Weight scala la posa B prima della sottrazione (non limitato).
- Ingressi
- A: La posa di animazione target.
- B: La posa base relativa da sottrarre.
- Proprietà
Proprietà Tipo Descrizione Weight Number Scala la posa B prima che venga sottratta da A. A 1.0 (predefinito), B viene completamente sottratta; a 0.0, non si verifica alcuna sottrazione. - Dati evento
- Gestione eventi: Il nodo ascolta gli eventi provenienti sia da Input A che da Input B.
- Emissione eventi: Tutti gli eventi provenienti sia da Input A che da Input B vengono passati attraverso senza modifiche.
Blend1D

Interpole linearmente tra le due pose di animazione più vicine alla posizione di ingresso corrente su un singolo asse.
- Ingressi
- Input1...InputN
- Position (Number): La coordinata specifica per ciascun ingresso successivo sull'asse di fusione.
- Proprietà
Proprietà Tipo Descrizione Position Number Il valore attivo corrente sull'asse di fusione utilizzato per campionare le animazioni. Se Position è al di fuori dell'intervallo delle posizioni di ingresso definite, il nodo esegue un'estrapolazione utilizzando i due ingressi più vicini. PhaseSync Enum.AnimationNodePhaseSync Configura se il timing degli ingressi figli debba essere sincronizzato.
- Sincronizzato (predefinito): Sincronizzazione normalizzata. Il nodo calcola una "durata virtuale" basata sulla media ponderata degli ingressi attivi. Ogni passo temporale del nodo di ingresso viene regolato in modo che tutti i figli convergano alla stessa fase, mantenendo le animazioni di lunghezze diverse in sincronia.
- Non sincronizzato: Fusione standard in cui i clip avanzano indipendentemente alle proprie velocità di riproduzione.
- Dati evento
- Gestione eventi: Il nodo ascolta gli eventi provenienti da tutti i nodi figli attivi attualmente.
- Emissione eventi: Solo gli eventi dall'ingresso attivo con il peso più alto si propagano, scalati dal suo peso di fusione. Gli eventi dall'ingresso secondario vengono silenziati.
Blend2D

Fonde più pose di animazione insieme basandosi su due parametri di ingresso all'interno di uno spazio coordinato 2D. Questo generalizza il nodo Blend1D per gestire scenari complessi, come la fusione basata sia sulla direzione di movimento che sulla velocità simultaneamente.
- Ingressi
- Input1...InputN
- X (Number): La coordinata X per ciascun ingresso successivo.
- Y (Number): La coordinata Y per ciascun ingresso successivo.
- Proprietà
Proprietà Tipo Descrizione InputMode Enum.AnimationNodeBlend2DInputMode Definisce il sistema di coordinate utilizzato per valutare lo spazio di fusione:
- Cartesiano (predefinito): Utilizza coordinate standard della griglia 2D. X e Y rappresentano la posizione corrente all'interno dello spazio di fusione.
- Polare: Utilizza valori angolari e di grandezza. X rappresenta la direzione in radianti, mentre Y rappresenta la grandezza o la forza del movimento. La direzione è pesata più pesantemente della grandezza, quindi gli ingressi a angoli simili ma con grandezze diverse si fondono più dolcemente rispetto agli ingressi a angoli diversi.
X Number La coordinata X corrente (Cartesiana) o Direzione in radianti (Polare). Y Number La coordinata Y corrente (Cartesiana) o Grandezza (Polare). PhaseSync Enum.AnimationNodePhaseSync Configura se il timing degli ingressi figli debba essere sincronizzato.
- Sincronizzato (predefinito): Sincronizzazione normalizzata. Il nodo calcola una "durata virtuale" basata sulla media ponderata degli ingressi attivi. Ogni passo temporale del nodo di ingresso viene regolato in modo che tutti i figli convergano alla stessa fase, mantenendo le animazioni di lunghezze diverse in sincronia.
- Non sincronizzato: Fusione standard in cui i clip avanzano indipendentemente alle proprie velocità di riproduzione.
- Dati evento
- Gestione eventi: Il nodo ascolta gli eventi provenienti da tutti i nodi figli attivi attualmente.
- Emissione eventi: Solo gli eventi dall'ingresso attivo con il peso più alto si propagano, scalati dal suo peso di fusione. Gli eventi dall'ingresso secondario vengono silenziati.
Maschera

Applica una maschera predefinita alla posa di ingresso. Una maschera è definita da un peso per oggetto (ad es. articolazione) nella gerarchia del rig, consentendo un controllo preciso o "sfumatura" dell'animazione.
- Ingressi
- Pose: La posa di animazione da mascherare.
- Proprietà
Proprietà Tipo Descrizione Mask ObjectValue Un ObjectValue (creato come figlio diretto della definizione del nodo di animazione Maschera) che definisce i pesi della maschera. Può funzionare in uno dei due modi:
- Direttamente: Il ObjectValue stesso contiene attributi che mappano i nomi degli oggetti del rig a valori di peso specifici.
- Per Riferimento: Il ObjectValue fa riferimento a un'altra Instance che contiene gli attributi di mapping. Questo consente maschere condivise tra diversi nodi nel grafico.
Quando crei una maschera, puoi scegliere uno schema di rig (HumanoidRigDescription o Picker) per popolare la gerarchia.
- HumanoidRigDescription: Standardizza la maschera per i personaggi umanoidi.
- Picker: Consente all'utente di selezionare un rig specifico nel workspace per popolare la gerarchia della maschera.
Invert Boolean Quando vero, applica i valori di peso come 1 - peso. Questo consente di riutilizzare una maschera in modo inverso senza creare un nuovo asset. - Dati evento
- Gestione eventi: Il nodo ascolta tutti gli eventi provenienti dall'ingresso Pose.
- Emissione eventi: Tutti gli eventi provenienti dall'ingresso Pose vengono passati attraverso senza modifiche.
Velocità

Modifica la velocità di riproduzione di una posa di animazione in ingresso.
- Ingressi
- Pose: La posa di animazione o sottografo la cui velocità di riproduzione sarà modificata.
- Proprietà
Proprietà Tipo Descrizione Speed Number Un moltiplicatore applicato al delta di tempo (). 0.0 mette in pausa il grafico, 1.0 è la velocità normale e 2.0 è il doppio della velocità. - Dati evento
- Gestione eventi: Il nodo ascolta gli eventi provenienti dall'ingresso Pose.
- Emissione eventi: Tutti gli eventi provenienti dall'ingresso Pose vengono passati attraverso senza modifiche. Nota che mentre la velocità di riproduzione visiva cambia, il timing degli eventi emessi (come i marker) scalerà di conseguenza con la velocità di riproduzione modificata.
UscitaGrafico

Rappresenta la posa finale valutata del grafico. Questo nodo è automaticamente incluso in tutti i nuovi grafici nell'Editor del Grafico di Animazione. La sua presenza garantisce che il grafico sia sempre valido e produca costantemente una posa di animazione.
- Ingressi
- Pose: I dati di animazione finali elaborati da applicare al rig.
- Proprietà
- Nessuno
- Dati evento
- Gestione eventi: Il nodo ascolta tutti gli eventi passati attraverso l'input finale connesso.
- Emissione eventi: Questo nodo funge da punto di uscita per il pipeline di animazione e non emette segnali di nuovo nel grafico.
Transizioni
Diversi nodi nel Grafico di Animazione (come Seleziona, Selezione Prioritaria, Sequenza e Sequenza Casuale) gestiscono come le animazioni si fondono quando si passa tra ingressi attivi. Per prevenire ridondanze nel riferimento ai nodi, questi comportamenti sono definiti da gruppi di proprietà di transizione standardizzati.
Transizione predefinita

Il comportamento di fusione di base applicato al nodo ogni volta che passa a un nuovo ingresso attivo.
- DefaultTransitionDuration (numero): Il tempo (in secondi) necessario per fondere completamente nella nuova posa.
- DefaultTransitionCurve (Enum.PoseEasingStyle): La funzione di easing applicata durante la fusione. Attualmente supporta solo Enum.PoseEasingStyle.Linear e Enum.PoseEasingStyle.CubicV2.
Sovrascrittura della transizione
Proprietà di collegamento specifiche per l'ingresso che sovrascrivono la transizione predefinita. Queste vengono applicate quando il nodo transita verso quell'ingresso specifico.
- TransitionOverrideDuration (numero): Sovrascrive la durata di transizione predefinita.
- TransitionOverrideCurve (Enum.PoseEasingStyle): Sovrascrive la curva di transizione predefinita. Attualmente supporta solo Enum.PoseEasingStyle.Linear e Enum.PoseEasingStyle.CubicV2
Replicazione
I parametri del grafico di animazione e lo stato interno del nodo si replicano automaticamente. La modalità di replicazione è determinata da Workspace.AuthorityMode al momento della creazione dello script Animate:
- In Enum.AuthorityMode.Automatic: I parametri impostati tramite AnimationTrack:SetParameter() si replicano automaticamente ad altri peer.
- In Enum.AuthorityMode.Server: Il server guida la simulazione completa del grafico. Tutti gli stati dei nodi, come il tempo trascorso per Enum.AnimationNodeType.ClipNode, e i parametri del grafico si replicano automaticamente dal server ai client. Il client del giocatore proprietario utilizza la previsione per una riproduzione locale fluida.
Esempi di Script Animate
Per generare script di esempio per guidare un grafico di animazione per un rig, utilizza Grafico -> Crea script Animate nell'Editor del Grafico di Animazione. Questo produce una gerarchia di script posizionata sotto StarterCharacterScripts (per personaggi giocatori) o direttamente sul rig (per NPC):
Animate (ModuleScript)
├── RunClient (LocalScript)
└── RunServer (Script, RunContext = Legacy)Il ModuloScript Animate contiene la logica di caricamento del grafico. Gli script RunClient e RunServer lo invocano nel contesto appropriato. Quali script sono inclusi dipende dal caso d'uso:
| Caso d'uso | Script Inclusi | Comportamento |
|---|---|---|
| NPC (qualsiasi modalità) | RunServer | Il server carica e riproduce il grafico. Lo stato si replica automaticamente a tutti i client. |
| Giocatore + Enum.AuthorityMode.Server | RunServer + RunClient | Il server guida il grafico in modo autorevole. Il client proprietario abilita Enum.PredictionMode per la previsione locale basata su rollback. |
| Giocatore + Enum.AuthorityMode.Automatic | RunClient | Il client proprietario carica e riproduce il grafico. I parametri si replicano automaticamente al server e ad altri client. |
I seguenti attributi sono memorizzati nello script Animate e configurano il suo comportamento:
| Attributo | Tipo | Descrizione |
|---|---|---|
| GraphName | String | Nome dell'asset del grafico di animazione. |
| CharacterName | String | Nome del rig a cui è destinato il grafico. |
| SourceAssetId | String | L'ID Asset pubblicato del grafico. Utilizzato a runtime nei giochi pubblicati. |
| IsServerAuthority | Boolean | Se lo script è stato creato con Workspace.AuthorityMode impostato su Server. Determina la strategia di replicazione. |
| PreviewInStudio | Boolean | Quando vero (predefinito), il play-testing in Studio carica il grafico non pubblicato localmente in modo da poter iterare senza pubblicare. Imposta su falso per testare l'asset pubblicato in Studio. Nota che attualmente questo non è supportato in Enum.AuthorityMode.Server. |
Replicazione dei parametri in modalità Automatica
Quando Workspace.AuthorityMode è Automatica:
- Il client proprietario guida i grafici dei personaggi giocatori; il server guida i grafici degli NPC.
- I parametri impostati tramite AnimationTrack:SetParameter() si replicano automaticamente ad altri peer. Più chiamate a SetParameter all'interno di un singolo frame vengono coalesciate (l'ultimo scrittore vince).
- Non è necessaria alcuna programmazione aggiuntiva per il trasporto dei parametri: il motore gestisce la replicazione internamente.
- Altri client vedono gli aggiornamenti dei parametri con un piccolo ritardo (un intervallo di invio più la latenza di rete).
Autorità del server
Quando Workspace.AuthorityMode è Server:
- Il server è autorevole per tutti i grafici: esegue la simulazione e replica l'intero stato del grafico.
- Cosa viene replicato: Sia i parametri che lo stato interno del nodo, incluso il tempo trascorso, le selezioni correnti, il progresso delle transizioni, i conteggi dei loop e i semi RNG. Questo assicura che tutti i client vedano un comportamento di animazione identico.
- Personaggi giocatori: Il server guida il grafico. Lo script RunClient del client proprietario abilita automaticamente Enum.PredictionMode sul Animator, quindi il giocatore locale vede un'animazione fluida e prevista che si riconcilia con il server in caso di disallineamento.
- NPC: Il server guida esclusivamente il grafico; i client osservano lo stato replicato senza simulazione locale.
Guidare i parametri
Utilizza AnimationTrack:SetParameter() da ogni script che esegue il grafico:
- NPC (qualsiasi modalità): Chiama SetParameter da RunServer (o qualsiasi Script del server con accesso al AnimationTrack).
- Personaggio giocatore in Enum.AuthorityMode.Server: Chiama SetParameter da entrambi RunServer e RunClient. Il server ha bisogno di parametri per guidare la simulazione autorevole, e il client proprietario ha bisogno degli stessi parametri per guidare la sua previsione locale.
- Personaggio giocatore in Enum.AuthorityMode.Automatic: Chiama SetParameter da RunClient (o qualsiasi LocalScript del client con accesso al AnimationTrack).
Lo script Animate generato include un blocco SetParameter commentato come punto di partenza. Decommenta e modifica per guidare i parametri dallo stato di gioco (velocità di movimento, stato umanoide, direzione di input, ecc.).