Gli NPC (personaggi non giocanti) possono aggiungere molta profondità a un gioco. Tutti i seguenti NPC possono essere personalizzati visivamente, il loro comportamento modificato, e gli zombie/soldati possono persino difendere un'area attaccando i giocatori o altri personaggi utilizzando un sistema di tag per impostare il comportamento.
Per utilizzare un NPC nel tuo gioco:
Nella pagina dell'oggetto NPC, fai clic sul pulsante verde Ottieni e conferma la transazione.
In Studio, apri il Toolbox.
Seleziona la sezione Inventario del tuo toolbox.

Trova l'NPC e fai clic su di esso per aggiungerlo nel luogo.
Struttura del personaggio
Ogni modello NPC contiene tipicamente i seguenti oggetti:
| Nome oggetto o [Tipo] | Tipo | Descrizione |
|---|---|---|
| Animazioni | Folder | Contiene Animazioni, come un AttackAnimation o DeathAnimation. |
| Pose Iniziali | Folder | Contiene informazioni sulle pose. |
| Animate | Script | Carica e riproduce animazioni sul rig del personaggio. Vedi Animate per ulteriori dettagli. |
| [Accessorio] | Accessory | Uno dei possibili accessori Accessori per l'NPC come cappelli, armi, ecc. |
| Salute | Script | Rigenera tipicamente la salute del Humanoid nel tempo. Disabilitare questo impedirà al personaggio di rigenerare salute. |
| Umanoide | Humanoid | Gestisce le proprietà relative al Humanoid, come Humanoid.Health, Humanoid.WalkSpeed, Humanoid.DisplayDistanceType, ecc. |
| NPC | Script | Definisce comportamenti specifici del personaggio come vagare, attaccare, ecc. Contiene i seguenti oggetti: Maid (ModuleScript) definisce una classe utile per liberare le risorse utilizzate. Ragdoll (ModuleScript) definisce una funzione che trasforma un personaggio in un corpo influenzato dalla fisica (contiene un RigTypes ModuleScript che definisce diverse funzioni di supporto). |
| RbxNpcSounds | Script | Definisce e gestisce il comportamento relativo agli effetti sonori del personaggio come correre, morire, ecc. |
| BodyParts | BasePart | Vari parti del corpo del personaggio attaccate a HumanoidRootPart o parti del corpo vicine tramite oggetti Motor6D o constraint. Vedi BodyParts per ulteriori dettagli. |
| HumanoidRootPart | BasePart | Una parte speciale invisibile considerata la radice del rig; questa è anche la PrimaryPart del Model del personaggio. |
| Configurazione | Configuration | Contiene oggetti valore che regolano vari comportamenti. Vedi Configurazione per ulteriori dettagli. |
Note di design
Quando utilizzi il kit NPC, tieni a mente le seguenti note di design:
L'aspetto visivo di un NPC può essere personalizzato aggiungendo/modificando vari oggetti [BodyParts] e aggiungendo oggetti Accessory.
I Soldati, lo Zombie che sbava e i Robot NP-C 9000 utilizzano Rthro come base del loro rig. Tuttavia, i Robot RO-01 utilizzano una base Rthro modificata che aggiunge parti di razzo collegate all'UpperTorso utilizzando WeldConstraints. Utilizzare giunti semplici in questo modo consente di includere geometria extra per i tuoi personaggi senza cambiare il rig di base originale.
A un livello base, le animazioni NPC possono essere personalizzate modificando l'AnimationId degli oggetti Animation esistenti all'interno delle pose dello script Animate, o quelli all'interno della cartella Animazioni. Tale cambiamento è essenzialmente uno scambio di asset - per cambiare i dettagli più fini, puoi creare copie personalizzate delle animazioni esistenti, e per riprodurre animazioni in condizioni diverse, puoi modificare direttamente gli script Animate o NPC. Per ulteriori informazioni, vedi Animazione.
Animate
Lo script Script Animate nel Model NPC gestisce le configurazioni relative all'animazione e contiene i seguenti oggetti:
| Nome oggetto o [Tipo] | Tipo | Descrizione |
|---|---|---|
| ScaleDampeningPercent | NumberValue | Definisce come le velocità di animazione vengono modificate man mano che il personaggio viene scalato (meno di 1 implica che la riproduzione dell'animazione si scala inversamente man mano che il personaggio viene scalato). |
| PlayEmote | BindableFunction | Questo può essere invocato da altri script per forzare l'assunzione di una posa. |
| [Pose] | StringValue | Riferimento a una categoria di animazione riproducibile come inattivo, salto, camminata, ecc. Questo oggetto può contenere qualsiasi numero di Animazioni. Queste Animazioni contengono un Weight (NumberValue) che prioritizza una delle molte animazioni da riprodurre mentre la posa è assunta; tipicamente usato per aggiungere varietà alle pose inattive e di danza. |
BodyParts
La BodyPart BasePart nel Model NPC rappresenta le varie parti del corpo del personaggio e contiene i seguenti oggetti:
| Nome oggetto o [Tipo] | Tipo | Descrizione |
|---|---|---|
| AvatarPartScaleType | StringValue | Determina come la parte sarà scalata; i valori possono essere Classic, ProportionsNormal o ProportionsSlender. |
| OriginalSize | Vector3Value | Determina la dimensione della parte quando la scala del personaggio è 1. |
| [Attachment] | Attachment | Definisce un punto relativo alla parte individuale che script, effetti e oggetti come un Tool o Accessory possono utilizzare durante il posizionamento. |
| [Motor6D] | Motor6D | Un giunto animato tra due parti del corpo. Nota che Animator dipende dal nome di Motor6Ds per essere coerente con quello di Motor6Ds utilizzato quando è stata creata un'animazione, quindi evita di rinominare questo oggetto. |
| [Joint] | WeldConstraint, Constraint, JointInstance | Un giunto non animato tra due parti del corpo. |
| [Sound] | Sound | Comunemente trovato nella testa o in HumanoidRootPart; riproduce suoni all'interno del rig come controllato dallo script RbxNpcSounds. |
Configurazione
Ogni NPC include un oggetto Configuration all'interno della sua gerarchia che funge da contenitore di oggetti valore. Questi sono utilizzati dallo script NPC per regolare vari comportamenti. A meno che non sia specificato diversamente, questi si applicano a tutti i personaggi.
| Nome oggetto o [Tipo] | Tipo | Descrizione |
|---|---|---|
| DestroyOnDeath | BoolValue | Fa sì che l'intero NPC venga distrutto poco dopo la sua morte. Disabilita questo per rendere i ragdoll persistenti. |
| PatrolEnabled | BoolValue | Fa sì che l'NPC vaghi in un'area attorno alla sua posizione iniziale. |
| PatrolRadius | NumberValue | Definisce la distanza massima che un NPC può vagare dalla sua posizione iniziale, assumendo che PatrolEnabled sia vero. |
| RagdollEnabled | BoolValue | Fa sì che l'NPC diventi floscio quando muore, invece di rompersi. |
| AttackDamage | NumberValue | Definisce quanto salute viene persa da una vittima quando attaccata dall'NPC. Questo si applica solo ai kit Zombie e Soldato. |
| AttackDelay | NumberValue | Definisce il numero minimo di secondi tra i colpi. Questo si applica solo ai kit Soldato. |
| AttackMode | NumberValue | Specifica cosa attaccherà il soldato, in base al sistema di tagging. Questo si applica solo ai kit Soldato. |
| AttackRadius | NumberValue | Definisce la distanza massima che l'NPC deve avere da una potenziale vittima prima di tentare di attaccare. Questo si applica solo ai kit Zombie e Soldato. |
| ClipCapacity | NumberValue | Definisce quanti proiettili il soldato può sparare prima di dover ricaricare. Questo si applica solo ai kit Soldato. |
| ReloadDelay | NumberValue | Definisce quanti secondi devono passare prima che il caricatore dell'arma del soldato venga ricaricato. Questo si applica solo ai kit Soldato. |
Assegna tag
Lo script NPC utilizza i tag CollectionService per gestire l'aggressività verso altri personaggi e giocatori. Vari tag della seguente tabella possono essere assegnati come segue:
Per assegnare un tag a un personaggio Player, puoi aggiungere uno Script a StarterCharacterScripts con una chiamata a CollectionService:AddTag(). Ad esempio:
local CollectionService = game:GetService("CollectionService")CollectionService:AddTag(script.Parent, "SoldierEnemy")
| Tag | Scopo |
|---|---|
| SoldierEnemy o SoldierFriend | Determina se un soldato, in base al valore di configurazione AttackMode, dovrebbe attaccare un altro personaggio. Quando l'AttackMode del soldato è impostato su 1, altri personaggi devono essere contrassegnati con SoldierEnemy per essere considerati attaccabili. Quando l'AttackMode del soldato è impostato su 2, tutti gli oggetti senza il tag SoldierFriend sono considerati attaccabili. Quando l'AttackMode del soldato è impostato su 3, questi tag vengono completamente ignorati e il soldato attaccherà tutti i personaggi. |
| ZombieFriend | Questo tag è utilizzato dallo zombie per determinare se non dovrebbe attaccare un personaggio. Quando applicato, lo zombie diventa docile nei confronti del personaggio contrassegnato. |



