Oggetti in movimento sono oggetti che si muovono su uno o più assi all'interno dello spazio 3D. Utilizzando la potenza integrata del motore di simulazione di Roblox, puoi far muovere gli oggetti e interagire con il loro ambiente in un modo che emula il comportamento fisico del mondo reale, familiare e intuitivo per i giocatori, come la gravità, l'aerodinamica e l'attrito.
Utilizzando il file Moving Objects .rbxl come riferimento, questo tutorial spiega come le forze fisiche influenzano il movimento lineare in Studio e ti mostra varie tecniche per spostare oggetti dal punto A al punto B nei tuoi giochi con diversi comportamenti di movimento, inclusa la guida su:
- Utilizzare un vincolo LinearVelocity per muovere un'intera assemblaggio a una velocità lineare costante.
- Utilizzare un PrismaticConstraint per vincolare un'assemblaggio a un singolo asse e muoverlo a una velocità lineare costante rispetto a un punto nello spazio 3D.
- Utilizzare il metodo ApplyImpulse per muovere un'assemblaggio con un impulso iniziale di forza in modo che l'assemblaggio deceleri lentamente nel tempo.
Movimento lineare e forze fisiche
Roblox Studio è un motore di simulazione del mondo reale che emula il comportamento fisico in tempo reale, quindi per prevedere come gli oggetti in movimento lineare possono comportarsi nei giochi, è importante avere una comprensione di alto livello di come gli oggetti si muovono nella vita reale con movimento lineare.
Movimento lineare è il movimento lungo un asse. Ad esempio, quando un blocco ha movimento lineare, si muove lungo un asse impostato.

Il movimento lineare non può esistere senza forze fisiche esterne che spingono o tirano gli oggetti per muoversi. Secondo la prima legge del moto di Newton, gli oggetti fermi rimangono fermi e gli oggetti in movimento rimangono in movimento con una velocità costante a meno che non siano soggetti a una forza esterna. Ad esempio, un blocco fermo rimane fermo a meno che una forza fisica come il vento non lo spinga a muoversi.
Forza è la misura della direzione e della grandezza di una spinta o di un tiro fisico che causa il cambiamento della velocità lineare degli oggetti lungo un asse. Un cambiamento nella velocità è noto come accelerazione. Questo concetto è particolarmente importante per far muovere gli oggetti in Studio; più forza applichi agli oggetti, più rapidamente accelerano.
Questo perché la forza deve essere maggiore di qualsiasi forza fisica che spinge contro l'oggetto, come la gravità o l'attrito. Ad esempio, se posizionassi il blocco su una piastra di metallo, la forza fisica del vento deve superare l'ammontare di attrito dalla piastra di metallo per continuare ad accelerare il blocco. Se la forza del vento non è molto maggiore dell'attrito della piastra di metallo, il blocco accelera, solo più lentamente rispetto all'esempio precedente.

Velocità lineare è la misura del movimento di un oggetto, o quanto velocemente l'oggetto cambia la sua posizione lungo un asse nel corso del tempo. Studio misura la velocità lineare in base a quanti stud si muove un oggetto al secondo. Gli stud sono le unità fisiche primarie di Roblox per misurare la lunghezza, e ogni stud equivale a circa 28 cm nel mondo reale.

Comprendere la velocità lineare è importante per progettare il gameplay perché ti aiuta a determinare quanta forza hai bisogno per raggiungere una velocità particolare per i tuoi oggetti in movimento. Ad esempio, quando vuoi spingere gli oggetti verso l'alto, è importante considerare come devi regolare la tua forza per superare la gravità all'interno dell'ambiente in modo che gli oggetti si muovano accuratamente.
Le sezioni seguenti approfondiscono questi concetti mentre impari a muovere oggetti a una velocità lineare costante o iniziale con la forza necessaria per superare eventuali forze fisiche opposte all'interno dell'ambiente. Mentre rivedi questi concetti fisici con le tecniche in arrivo, puoi prevedere più accuratamente come regolare i valori delle proprietà per ottenere qualsiasi comportamento di movimento lineare ideale in Studio.
Mantenere una velocità lineare costante
Affinché un oggetto raggiunga e mantenga una velocità lineare costante, ha bisogno di una forza per superare eventuali forze fisiche opposte che decelerano la velocità lineare dell'oggetto o causano che l'oggetto rimanga fermo. Ad esempio, se vuoi che un oggetto abbia una velocità lineare di [0, 12, 0] in Studio, hai bisogno di abbastanza forza affinché l'oggetto raggiunga e mantenga 12 stud al secondo lungo l'asse Y nel suo ambiente.
La quantità di forza necessaria dipende non solo dalle forze fisiche opposte all'interno dell'ambiente stesso, come la gravità e l'attrito, ma anche dall'oggetto stesso. Ad esempio, se hai due oggetti della stessa forma che si muovono sullo stesso asse, l'oggetto con una maggiore quantità di massa richiede più forza per raggiungere la stessa accelerazione lineare.
Le seguenti sottosezioni utilizzano assemblaggi di diverse forme e dimensioni per insegnarti come muovere un'intero oggetto o solo una parte dell'oggetto a una velocità lineare costante. Mentre sperimenti con diversi valori delle proprietà, imparerai a stimare la massima quantità di forza di cui hai bisogno per gli assemblaggi nei tuoi giochi.
Usa vincoli LinearVelocity
Gli oggetti LinearVelocity sono un tipo di vincolo di movimento che applica forza su un'intera assemblaggio per mantenere una velocità lineare costante. Non bloccando la posizione dell'assemblaggio su un asse durante il suo movimento, l'assemblaggio è libero di ruotare mentre collide con altri oggetti nello spazio 3D. Questo tipo di movimento porta a scenari di gioco sorprendenti che sono più difficili da prevedere per i giocatori.
Per iniziare a muovere l'assemblaggio, il vincolo LinearVelocity deve sapere:
- Il punto e la direzione positiva o negativa per applicare una forza.
- La quantità di stud che vuoi che l'assemblaggio si muova al secondo.
- La massima quantità di forza che il motore può applicare affinché l'assemblaggio raggiunga la velocità lineare costante.
Per dimostrare questo processo, configurerai una ninfea con un attacco a cui un vincolo LinearVelocity fa riferimento per muovere la ninfea di 15 stud al secondo lungo l'asse X negativo del mondo a una velocità lineare costante.

Aggiungi attacco
Puoi specificare il punto per applicare forza aggiungendo un oggetto Attachment all'assemblaggio, quindi configurando la posizione dell'attacco nello spazio 3D. Il gioco di esempio Moving Objects posiziona un attacco al centro della ninfea in modo che il vincolo possa muovere la mesh dall'attacco lungo un particolare asse.
Gli attacchi includono aiuti visivi per aiutarti a visualizzare i loro assi di movimento. La freccia gialla denota l'asse principale dell'attacco, e la freccia arancione denota l'asse secondario dell'attacco. Anche se nessuno degli assi di movimento influenza il movimento della ninfea nei passaggi di questa tecnica, è importante comprendere questi aiuti visivi per riferimento futuro perché possono assisterti nel determinare il comportamento ideale per diversi tipi di vincoli, come il PrismaticConstraint nella prossima tecnica.

Per aggiungere un attacco:
Nella finestra Explorer, espandi la cartella LinearVelocityExample, quindi espandi il suo modello figlio LilyPad_DIY.
Inserisci un attacco nella mesh Pad.
- Passa sopra la mesh e fai clic sul pulsante ⊕. Viene visualizzato un menu contestuale.
- Dal menu, inserisci un Attachment. L'attacco viene visualizzato al centro della parte.
- Rinomina l'attacco in MoveAttachment.

Configura vincolo
Ora che la tua mesh ha un punto fisso per muovere la ninfea, puoi configurare le proprietà di un vincolo LinearVelocity per specificare la direzione e la grandezza per la velocità lineare costante, la quantità di stud che vuoi che la mesh si muova al secondo, e la massima quantità di forza che il motore può applicare affinché la mesh raggiunga una velocità lineare costante.
Il gioco di esempio Moving Objects applica fino a 5000 Rowtons di forza costante per muovere la ninfea di 15 stud al secondo lungo l'asse X negativo del mondo a una velocità lineare costante. I Rowtons sono le unità fisiche primarie di Roblox per misurare la forza. Per fare riferimento alle unità fisiche di Roblox e a come si convertono in unità metriche, vedere Unità di Roblox.
Per configurare un vincolo LinearVelocity:
Per rendere il vincolo visibile nella vista per poter fare riferimento alla sua direzione lineare, abilita Mostra dettagli vincolo dal menu Visualizza di Studio.
Inserisci un vincolo LinearVelocity nella mesh Pad.
- Nella finestra Explorer, passa sopra la mesh, quindi fai clic sull'icona ⊕. Viene visualizzato un menu contestuale.
- Dal menu contestuale, inserisci LinearVelocity.
Assegna l'attacco della mesh al nuovo vincolo.
- Nella finestra Explorer, seleziona il vincolo.
- Nella finestra Proprietà,
- Imposta Attachment0 su MoveAttachment.
- Imposta MaxForce su 5000 per applicare fino a 5000 Rowtons di forza costante per raggiungere la velocità lineare target.
- Mantieni RelativeTo su World per muovere la ninfea rispetto alla posizione e all'orientamento del mondo.
- Imposta VelocityConstraint su Line per vincolare la forza lungo una linea dall'attacco.
- Imposta LineDirection su -1, 0, 0 per muovere la ninfea lungo l'asse X negativo del mondo. Nota che se impostassi questa proprietà su 1, 0, 0, la ninfea si muoverebbe lungo l'asse X positivo del mondo.
- Imposta LineVelocity su 15 per muovere la ninfea di 15 stud al secondo.

Verifica che la quantità di forza impostata muova la mesh di 15 stud al secondo lungo l'asse X negativo del mondo.
Seleziona la modalità di simulazione Esegui dal menu a discesa della mezzanina e fai clic sul pulsante Gioca per iniziare. Studio simula il gioco nella posizione attuale della telecamera senza il tuo avatar nello spazio 3D.

Usa vincoli PrismaticConstraint
Gli oggetti PrismaticConstraint sono un tipo di vincolo meccanico che crea un giunto rigido tra due attacchi, consentendo ai loro assemblaggi genitori di muoversi lungo un asse rispetto l'uno all'altro. Bloccando la posizione di entrambi gli assemblaggi su un singolo asse, ciascun assemblaggio può ruotare solo se ruotano insieme nella stessa direzione.
Questo tipo di movimento porta a scenari di gioco stabili che sono più facili da prevedere per i giocatori. Ad esempio, il gioco di esempio Moving Objects utilizza oggetti PrismaticConstraint per muovere piattaforme di tronchi che i giocatori possono utilizzare per attraversare con cautela un enorme fiume.
Quando imposti PrismaticConstraint.ActuatorType su Motor, questo vincolo applica forza sui due attacchi con l'obiettivo che gli attacchi raggiungano e mantengano una velocità lineare costante. Se ancorassi uno degli assemblaggi genitori degli attacchi, la forza continuerebbe a muovere l'assemblaggio non ancorato a una velocità lineare costante mentre l'assemblaggio ancorato rimane fermo.
Per iniziare a muovere l'assemblaggio, il vincolo PrismaticConstraint deve sapere:
- Il punto e la direzione positiva o negativa per applicare una forza.
- La quantità di stud che vuoi che gli attacchi si muovano al secondo.
- La massima quantità di forza che il motore può applicare affinché gli attacchi e i loro assemblaggi genitori raggiungano una velocità lineare costante.
Per dimostrare questo processo, configurerai un assemblaggio di tronchi con due oggetti che hanno attacchi figli a cui un PrismaticConstraint fa riferimento per muovere il tronco di 40 stud al secondo lungo l'asse X negativo del mondo a una velocità lineare costante.

Configura attacchi
Puoi specificare la direzione per muovere un particolare oggetto all'interno di un assemblaggio aggiungendo due oggetti Attachment all'assemblaggio, quindi configurando il loro allineamento e orientamento nello spazio 3D. Il gioco di esempio Moving Objects allinea due attacchi lungo l'asse X del mondo vicino alla posizione in cui il tronco non ancorato si sovrappone alla parte ancorata, e orienta ciascun asse principale dell'attacco per affrontare l'asse X negativo del mondo.
Quando configuri il tuo vincolo PrismaticConstraint nella sezione successiva, muoverà il tronco in relazione alla parte ancorata. In altre parole, il tronco si muoverà lontano dalla parte stazionaria che non può muoversi perché è ancorata nello spazio 3D.
Per configurare gli attacchi per il vincolo prismatico:
Nella finestra Explorer, espandi la cartella PrismaticConstraintExample, quindi espandi il suo modello figlio Log_DIY.
Inserisci un attacco nella mesh Log.
- Passa sopra la mesh e fai clic sul pulsante ⊕. Viene visualizzato un menu contestuale.
- Dal menu, inserisci un Attachment. L'attacco viene visualizzato al centro della parte.
- Rinomina l'attacco in LogAttachment.

Utilizzando lo stesso processo, inserisci un attacco nella parte Anchor, quindi rinomina l'attacco in AnchorAttachment.

Utilizzando lo strumento View Selector come riferimento per le coordinate del mondo, ruota LogAttachment e AnchorAttachment finché ciascun asse principale dell'attacco non punta verso l'asse X negativo del mondo.

Riposiziona AnchorAttachment in modo che entrambi gli attacchi siano allineati sull'asse X del mondo.

Configura vincolo
Ora che i tuoi attacchi sono allineati sullo stesso asse e affrontano la stessa direzione in cui vuoi che il tronco si muova, puoi configurare le proprietà di un vincolo PrismaticConstraint per specificare se applicare la velocità lineare costante target nella direzione positiva o negativa di ciascun asse principale degli attacchi, la quantità di stud che vuoi che gli attacchi si muovano al secondo, e la massima quantità di forza che il motore può applicare affinché il tronco raggiunga una velocità lineare costante.
Sebbene tu possa scegliere valori diversi per i tuoi casi d'uso, il gioco di esempio Moving Objects applica fino a 50000 Rowtons di forza costante per muovere gli attacchi di 40 radian al secondo lungo l'asse X negativo del mondo a una velocità lineare costante. Tuttavia, poiché l'attacco di ancoraggio si trova in un oggetto ancorato, solo l'attacco del tronco può muoversi.
Per configurare un vincolo prismatico:
Inserisci un oggetto PrismaticConstraint nella mesh Log.
- Nella finestra Explorer, passa sopra la mesh, quindi fai clic sull'icona ⊕. Viene visualizzato un menu contestuale.
- Dal menu contestuale, inserisci un PrismaticConstraint.
Assegna gli attacchi del tronco al nuovo vincolo in modo che il tronco si muova in relazione a la parte bloccata.
- Nella finestra Explorer, seleziona il vincolo.
- Nella finestra Proprietà,
- Imposta Attachment0 su AnchorAttachment.
- Imposta Attachment1 su LogAttachment. Il vincolo viene visualizzato nella vista.

Nella finestra Explorer, seleziona il vincolo, quindi nella finestra Proprietà:
- Imposta ActuatorType su Motor. Vengono visualizzati nuovi campi di proprietà.
- Imposta MotorMaxForce su 50000 per applicare fino a 50000 Rowtons di forza costante per raggiungere la velocità lineare target.
- Imposta Velocity su 40 per muovere il tronco di 40 stud al secondo.

Verifica che la quantità di forza impostata muova il tronco di 40 stud al secondo lungo l'asse X negativo del mondo.
Seleziona la modalità di simulazione Esegui dal menu a discesa della mezzanina e fai clic sul pulsante Gioca per iniziare. Studio simula il gioco nella posizione attuale della telecamera senza il tuo avatar nello spazio 3D.

Applica una forza lineare iniziale
Un altro modo per cambiare la velocità lineare di un oggetto è applicare un impulso di forza. Dopo l'impulso di forza, l'oggetto decelera fino a fermarsi se c'è una forza opposta come l'attrito, oppure rimane in movimento con una velocità lineare costante se non ci sono forze opposte.
Questa tecnica è utile per muovere oggetti dopo un evento significativo nel gameplay, come un'esplosione o una collisione impattante, perché fornisce ai giocatori un feedback istantaneo. Per dimostrare, la seguente sottosezione ti insegna come lanciare il personaggio di un giocatore verso l'alto nel cielo quando collide con un pad di salto con un impulso iniziale che puoi adattare con nuovi valori per soddisfare i tuoi requisiti di gameplay.
Usa ApplyImpulse
Il metodo ApplyImpulse applica forza su un'intera assemblaggio per ottenere una velocità lineare iniziale prima di rallentare fino a fermarsi quando ci sono forze opposte. Per iniziare a muovere l'assemblaggio, il metodo deve sapere:
- L'assemblaggio da muovere.
- L'asse su cui applicare forza per raggiungere una velocità lineare iniziale.
- La quantità di forza da applicare a ciascun asse.
Puoi definire tutti questi valori in uno script. Ad esempio, lo script di esempio definisce l'assemblaggio da muovere come l'oggetto Humanoid del personaggio del giocatore, quindi applica un impulso di forza di 2500 Rowton-secondi per lanciare il giocatore verso l'alto lungo l'asse Y positivo del mondo. Nota che i personaggi dei giocatori hanno diverse quantità di massa, quindi potresti dover aumentare e bilanciare questa forza per lanciare ogni giocatore senza lanciare i personaggi dei giocatori con quantità di massa più piccole troppo in alto.
Per muovere un'assemblaggio utilizzando ApplyImpulse:
Nella finestra Explorer, espandi la cartella ApplyImpulseExample, quindi espandi il suo modello figlio JumpPad_DIY.
Inserisci uno script nella parte JumpPad.
- Passa sopra la parte e fai clic sul pulsante ⊕. Viene visualizzato un menu contestuale.
- Dal menu, inserisci un Script. L'attacco viene visualizzato al centro della parte.
- Rinomina lo script in JumpScript.
Sostituisci il codice predefinito con il seguente codice:
local volume = script.Parentlocal function onTouched(other)local impulse = Vector3.new(0, 2500, 0)local character = other.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and other.Name == "LeftFoot" thenother:ApplyImpulse(impulse)endendvolume.Touched:Connect(onTouched)