Condividi tramite


Guida per programmatori di fisica mesh

Suggerimenti generali

È possibile iniziare con l'analisi della documentazione sulla fisica di Unity. Sono disponibili molte risorse su come ottimizzare la fisica in Unity.

La fisica delle mesh presenta alcune sfide aggiuntive. Ecco alcuni suggerimenti per aiutarli a superarli.

  • Crea pareti spesse: la sincronizzazione di rete potrebbe spostare corpi rigidi leggermente. Di conseguenza, vedrai una penetrazione aggiuntiva tra gli oggetti. Piccoli corpi dinamici potrebbero essere spinto attraverso pareti sottili. Per oggetti e pareti più spessi, questi effetti di tunneling sono meno probabili. Se possibile, utilizzare lo scafo convesso o un piccolo set di scafi convessa per corpi dinamici.

  • Quando possibile, usare parti convesse spesse per la geometria statica. Cercare di evitare mesh, soprattutto mesh altamente dense.

  • Masse realistiche in kg: il contenuto di varie origini potrebbe interagire nella stessa scena. Questo funziona bene se i rapporti di massa tra gli oggetti sono ragionevoli. Un buon punto di partenza è assegnare masse realistiche ai corpi utilizzando kg.

Sviluppo di contenuti avanzati di fisica mesh

Animazioni di riproduzione automatica

È possibile aggiungere animazioni di riproduzione automatica alla scena che interagiscono con i corpi fisici. Queste animazioni vengono sincronizzate automaticamente tra i client modificando temporaneamente la velocità di riproduzione (rallentandoli o accelerandoli) su ogni client fino a quando tutti i client non si trovano nello stesso stato di animazione contemporaneamente.

Impostazioni

  • Riproduzione abilitata automaticamente .
  • Anima fisica consigliata (ma non necessaria) se l'animazione influisce sui collider che interagiscono con i corpi fisici.
  • Culling Type impostato su "Always Animate" (applicato automaticamente dalla fisica mesh) perché l'animazione potrebbe influire sui corpi fisici anche quando sono fuori schermo.

Screenshot delle impostazioni del componente Animazione nel controllo.

Il clip di animazione usato dall'animazione di riproduzione automatica può usare qualsiasi modalità di wrapping. Le scelte utili sono "Loop" e "Ping Pong".

Screenshot delle impostazioni dell'asset Clip animazione nel controllo.

Componenti

L'aggiunta di uno dei componenti seguenti MonoBehaviour a un oggetto aggiungerà il comportamento specifico a questo oggetto.

Corpo appiccicoso

Rende i corpi attaccati ad altri corpi. Può essere utilizzato per lanciare freccette in altri corpi o per allegare un'immagine su un muro. Questa operazione viene implementata creando un vincolo fisso tra i due corpi coinvolti. Nota: questa operazione viene eseguita su tutti i client e pertanto viene implementata come messaggio di rete speciale.

Screenshot delle opzioni dello script Sticky Body in Inspector.Screenshot of the Sticky Body script options in the Inspector.

Impostazioni

  • Stick: definisce se il corpo verrà attaccato a corpi dinamici o/e statici.
  • Quando: a volte vuoi attaccare un corpo veloce quando tocca solo un altro corpo, e a volte vuoi attaccare un corpo quando è tenuto contro un altro corpo per un determinato momento, come aspettare che la colla si induri quando si incolla un pulsante su un muro.
  • Controllo collisioni Per disabilitare collisioni specifiche tra un corpo e un altro. Normalmente è possibile/usare livelli di collisione. Tuttavia, poiché esistono solo 32 livelli di collisione hardcoded in Microsoft Mesh, questa potrebbe non essere un'opzione. Qui è possibile disabilitare corpi specifici.
  • Corpi interessati per il filtro corpo collisione applicato per il controllo collisioni.

Campo di contenimento

Assicura che i corpi rigidi rimangano entro i limiti di uno o più collisi trigger.

Screenshot delle opzioni dello script Del campo di contenimento nel controllo.

Affinché questo componente funzioni, deve essere collegato a uno o più collisori di trigger. Questi collisori di trigger possono anche essere annidati nella gerarchia di trasformazione sotto l'oggetto GameObject a cui è collegato questo componente.

I corpi rigidi interessati da questo componente devono essere già entro i limiti dei collisi trigger (il "volume trigger") all'avvio della scena. Il centro di massa di ognuno di questi corpi rigidi sarà quindi vincolato a rimanere entro i confini del volume del trigger – non sarà possibile tirare o spostare in altro modo i centri di massa di questi corpi rigidi ovunque fuori.

Impostazioni:

  • La deviazione massima dal contenimento consente al centro di massa di un rigido interessato di uscire leggermente fuori dai volumi di trigger prima che si aggancii indietro. Si tratta di un compromesso di ottimizzazione delle prestazioni: se la deviazione massima consentita è grande, il corpo potrebbe lasciare il volume del trigger e bloccarsi indietro, ma il codice può evitare di dover controllare e verificare la posizione del corpo molto spesso quando si riposa o si sposta lentamente all'interno del volume del trigger.

  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Campo vettore velocità

Consente di accelerare/decelerare un corpo rigido fino a raggiungere una velocità di destinazione specifica.

Screenshot delle opzioni script Directional Velocity Field nel controllo.

Questo componente controlla sia la grandezza che la direzione della velocità. Vedi Campo della grandezza della velocità per controllare solo la grandezza e il campo direzione velocità per controllare solo la direzione. Esistono due modalità di funzionamento:

  • Se attaccato a un rigido, questo rigido sarà controllato.
  • Se collegato a un collisore di trigger, tutti i corpi rigidi che entrano in questo volume di trigger saranno interessati.

Impostazioni:

  • Il tipo di velocità definisce se stiamo lavorando sulla velocità lineare o angolare.
  • La direzione in Spazio locale definisce se la velocità di destinazione viene specificata nello spazio locale dell'oggetto a cui è collegato il componente.
  • Velocità di destinazione imposta il vettore di velocità desiderato in metri/secondo (o radianti/secondo in caso di velocità angolare).
  • L'accelerazione massima definisce l'accelerazione massima applicata per raggiungere la velocità di destinazione.
  • Il tipo di accelerazione definisce un tipo di accelerazione per raggiungere una velocità di destinazione.
    • Istantaneamente raggiungerà immediatamente la velocità di destinazione (uguale all'accelerazione costante con accelerazione massima = infinito).
    • L'accelerazione costante garantisce che il corpo raggiunga la velocità di destinazione indipendentemente dai limiti dell'impostazione Accelerazione massima.
    • Smooth Approach riduce l'accelerazione più vicina alla velocità di destinazione. Ciò significa che, in pratica, non raggiungerete mai la velocità di destinazione. Inoltre, dovrebbe esserci un'influenza esterna, come andare in salita o discesa, questa influenza extra non sarà completamente ignorata, causando una discesa più veloce che in salita.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Campo gravità ridimensionato

Cambia il modo in cui la gravità influisce sui corpi rigidi entro i confini di uno o più collisi trigger.

Screenshot delle opzioni dello script campo antigravity nel controllo.

Affinché questo componente funzioni, deve essere collegato a uno o più collisori di trigger. Questi collisori di trigger possono anche essere annidati nella gerarchia di trasformazione al di sotto del GameObject a cui è associato questo componente.

Tutti i corpi rigidi che toccano o sovrappongono i collisi trigger (il "volume trigger") si comportano in base alle impostazioni di gravità di questo componente anziché alla gravità fisica globale. I corpi rigidi che hanno La gravità usata disabilitata vengono ignorati.

C'è un rapporto interessante tra la percezione delle dimensioni del giocatore nel mondo e la gravità:

  • Se la gravità è minore di quella che viene usata per (gli oggetti sono più lenti quando cadono), il giocatore percepisce se stesso essere più grande, come un gigante.
  • Se la gravità è maggiore di quella che viene usata per (gli oggetti sono più veloci quando cadono), il giocatore percepisce se stesso essere più piccolo , come un mouse.

Impostazioni:

  • Gravity Preset consente di selezionare diversi set di impostazioni interessanti e utili per la proprietà Scala di gravità: vari corpi celeste (Luna, Marte, Terra, Giove), nessuna gravità (spazio esterno) o gravità invertita (a capo). Puoi sempre sovrascrivere la scala di gravità con qualsiasi valore che ti piace.
  • La scala di gravità imposta la gravità locale all'interno del volume del trigger in relazione alla gravità fisica predefinita che influisce sulla scena. La scala di gravità predefinita di 1 lascia invariata la gravità; valori maggiori aumentano la gravità; 0 rimuove la gravità; i valori negativi cambiano la direzione della gravità.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Campo di gravità orbitale

Simula la gravità di un "pianeta toy" nella scena.

Screenshot delle opzioni dello script Di gravità nel controllo.

Affinché questo componente funzioni, deve essere collegato a uno o più collisori di trigger. Questi collisori di trigger possono anche essere annidati nella gerarchia di trasformazione al di sotto del GameObject a cui è associato questo componente.

Tutti i corpi rigidi che toccano o si sovrappongono i collisi trigger (il "volume trigger") vengono trascinati verso la posizione dell'oggetto a cui è collegato questo componente.

Impostazioni:

  • La gravità definisce la grandezza della gravità. Questa è l'accelerazione del corpo orbitante (la "luna") verso il corpo centrale a una distanza di un metro. Poiché la velocità orbitale è sqrt(gravità/raggio), questo valore descrive la velocità di una luna in un'orbita stabile a un raggio di un metro.

  • Disable Global Gravity disabilita l'impostazione della gravità fisica globale della scena per i corpi interessati da questo componente. Per impostazione predefinita, la gravità globale della scena influirà ancora sul pianeta e sulle sue lune.

  • I corpi interessati definiscono condizioni di filtro facoltative per i corpi che possono diventare lune in questo campo di gravità.

  • Force Moons On Circular Orbit è un imbroglio che applica alcune forze delicate per spingere la luna in un'orbita circolare. La motivazione è che è difficile per un non esperto impostare la gravità e la velocità iniziale dei corpi in modo da ottenere un'orbita circolare. Inoltre, se questa opzione è abilitata, tutte le lune posizionate all'interno del campo di gravità in Unity Editor avviano automaticamente l'orbita attorno al corpo centrale quando viene caricata la scena.

  • La forza dell'orbita forzata ridimensiona l'accelerazione applicata per forzare la luna su un'orbita circolare.

  • Imposta raggio forzato dove posiziona le lune posizionate all'interno del campo di gravità in Unity Editor adotta automaticamente la distanza iniziale dal corpo centrale come orbita preferita.

  • Set Forced Radius Where Dropped rende le lune che vengono afferrate in modo interattivo e spostate nel campo di gravità adottano automaticamente la distanza dal corpo centrale in cui sono stati rilasciati come orbita preferita.

  • Il raggio di forza predefinito definisce il raggio predefinito per il cheat precedente usato, a meno che non venga sottoposto a override da una delle altre opzioni.

Campo Buoyancy

Simula la buoyancy di corpi rigidi arbitrari sull'acqua: i corpi sembrano galleggiare sul volume del trigger connesso.

Screenshot delle opzioni dello script del campo Buoyancy in Inspector (Controllo).

Affinché questo componente funzioni, deve essere collegato a uno o più collisori di trigger. Questi collisori di trigger possono anche essere annidati nella gerarchia di trasformazione al di sotto del GameObject a cui è associato questo componente.

Tutti i corpi rigidi che toccano o sovrappongono i collisori trigger (il "volume trigger") sperimentano forze di buoyancy (upthrust) per mantenerli afloat.

Questo componente utilizza la forma dei collisori del rigido per calcolare la sua densità (in altre parole, volume diviso per massa), buoyancy, trascinamento e attrito.

Collideri buoyancy

Vantaggio: prestazioni. Il costo di calcolo dei calcoli della buoyancy viene ridimensionato in modo lineare con il numero di vertici collisori. I collisi fisici tipici per i corpi, anche se già semplificati, sono spesso molto più complessi (in termini di numero di vertici) di quanto richiesto per il corretto funzionamento della buoyancy.

Procedura: aggiungere uno o più collisori aggiuntivi (che possono essere disabilitati) a un corpo. Contrassegnare i collisori come scafi di buoyancy espliciti assegnando loro un materiale fisico denominato BuoyancyHull (ortografia esatta!). I dettagli di configurazione di questo materiale fisico non importa - un materiale fisico adatto viene fornito con il pacchetto del toolkit mesh. Se un corpo ha collisori contrassegnati come questo, solo questi collisori vengono utilizzati per calcoli di buoyancy; tutti gli altri collisori vengono ignorati.

Procedure consigliate: collisori espliciti dello scafo di buoyancy a qualsiasi rigido che può essere gettato in un BuoyancyField. È preferibile (e più semplice) usare i collisi cubi perché hanno i vertici più piccoli (otto per collisore). La corrispondenza della forma visiva esatta del corpo buoyant in genere non è necessaria per un buon risultato; un'approssimazione molto grossolana è in genere sufficiente.

Impostazioni:

  • Densità è la densità del liquido simulato che "riempie" il volume del trigger in chilogrammi per metro cubo. Il valore predefinito rappresenta la densità approssimativa dell'acqua a temperatura ambiente.
  • Tipo di superficie specifica il modo in cui il componente campiona la forma della superficie dell'acqua per calcolare le forze di buoyancy.
    • Static Flat presuppone che la superficie dell'acqua sia perfettamente planare e non si muove mai dalla posizione iniziale nella scena. La posizione e l'orientamento della superficie dell'acqua vengono determinati una sola volta, all'avvio della scena. Questa è l'opzione computazionale più economica.
    • Dynamic Flat presuppone che la superficie dell'acqua sia perfettamente planare ma consenta di muoversi (ad esempio, il livello dell'acqua può salire o affondare). La posizione e l'orientamento della superficie dell'acqua vengono determinati una volta per fotogramma.
    • Dynamic Flat Per Body supporta una superficie d'acqua che non è planare (ad esempio, può essere ondulata). Per ogni rigido che galleggia sulla superficie d'acqua, una approssimazione planare locale della superficie d'acqua sotto il corpo rigido viene determinata una volta per ogni telaio, che viene quindi utilizzato per calcolare le forze di buoyancy per questo rigido.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi che possono galleggiare in questo campo di buoyancy. Per impostazione predefinita, tutti i corpi sono idonei.
  • Trascina la resistenza al movimento mentre il corpo rigido colpisce l'acqua (in altre parole, attrito ortogonale sulla superficie del corpo).
  • L'attrito della pelle controlla la resistenza al movimento mentre il corpo rigido viene spostato attraverso l'acqua (in altre parole, attrito parallelo alla superficie del corpo).

Importante Per consentire al componente di accedere ai triangoli mesh collider di un oggetto rigido, è necessario selezionare la casella di controllo "Lettura/Scrittura abilitata" nelle impostazioni di importazione della mesh del collisore . In caso contrario, il corpo verrà ignorato dal campo della buoyancy e passerà attraverso il campo senza essere interessato da esso.

Importante Assicurarsi che i corpi fisici abbiano masse plausibili per assicurarsi che si comportino come previsto in un campo di buoyancy:

  • Se la massa di un corpo rigido è implausbilmente alta rispetto al suo volume, sprofonderà in fondo.
  • Se la massa di un corpo rigido è implausibmente bassa rispetto al suo volume (ad esempio, l'impostazione predefinita di Rigidbody Unity di un'unità di massa), si siederà solo sopra il liquido simulato.

Per impostazione predefinita, il campo buoyancy campiona la superficie del volume del trigger per determinare la forma della superficie dell'acqua (soggetta all'impostazione Tipo di superficie acqua scelta). Le superfici animate nella memoria della CPU possono essere campionate in questo modo, ma le superfici animate da un vertex shader GPU non sono visibili allo script in fase di esecuzione. Il BuoyancyField componente fornisce un delegato di callback accessibile tramite script denominato GetDistanceFromSurface che consente agli script esterni di fornire informazioni su una forma di superficie d'acqua animata dalla GPU.

Per informazioni su come ottenere una superficie d'acqua ondulata con un approccio senza codice, vedere il BuoyancyFieldWaves componente seguente.

Onde campo buoyancy

Componente aggiuntivo al BuoyancyField componente che funziona con un vertex shader specifico, BuoyancyFieldWaves_VertexPosition disponibile sia come grafico sub-shader che come file di inclusione HLSL. In questo modo viene creato l'effetto visivo di una superficie d'acqua ondulata insieme al comportamento corrispondente degli oggetti che fluttuano sulla superficie dell'acqua.

Screenshot delle opzioni di script Buoyancy Field Waves nel controllo.

Questo componente deve essere aggiunto a un GameObject che include già un BuoyancyField componente aggiunto.

La superficie d'acqua da animare deve essere fornita come mesh piatta e a mosaico i cui confini sono della forma desiderata della superficie d'acqua quando si vede dall'alto verso il basso. Il materiale utilizzato per la superficie dell'acqua deve usare uno shader che incorpora il BuoyancyFieldWaves_VertexPosition sub-shader per determinare le posizioni dei vertici della mesh. È possibile usare il materiale di esempio BasicWavyWaterSurface incluso (e il grafico shader con lo stesso nome) come punto di partenza per gli sviluppi dello shader.

Impostazioni:

  • Il renderer mesh onde fa riferimento al MeshRenderer componente che esegue il rendering della mesh di superficie dell'acqua.
    • Il materiale mostra il materiale utilizzato dal renderer. Questo annuncio ha solo fini informativi.
    • Lo shader mostra lo shader usato dal materiale. Questo annuncio ha solo fini informativi.
  • I nomi delle proprietà waves shader definiscono i nomi delle proprietà dello shader necessarie che devono essere esposte dallo shader. Queste proprietà sono accessibili da questo componente in fase di esecuzione per garantire che il comportamento del campo buoyancy rimanga sincronizzato con gli oggetti visivi della superficie d'acqua in tutti i client.
    • Tempo controllato dallo script è il nome di una proprietà -type shader esposta floatche verrà continuamente aggiornata da questo componente ogni fotogramma con un tempo in continuo aumento (misurato in secondi) sincronizzato tra tutti i client. Il BuoyancyFieldWaves_VertexPosition sub-shader usa questo tempo condiviso per creare un modello di onda che rimane sincronizzato su tutti i client e sincronizzato con il comportamento del campo di buoyancy.
    • Wave Speed è il nome di una proprietà -type shader esposta floatche determina la velocità di base alla quale le onde si propagano orizzontalmente. Il valore della proprietà deve essere impostato nel materiale applicato alla mesh della superficie d'onda. L'impostazione di questo valore su zero rende la superficie dell'onda statica e inmovibile.
    • Wave Length è il nome di una proprietà -type shader esposta floatche determina la grossolanità del pattern d'onda. Il valore della proprietà deve essere impostato nel materiale applicato alla mesh della superficie d'onda. I valori più piccoli producono increspature corte; valori più grandi producono onde lunghe e spazzanti.
    • Wave Height è il nome di una proprietà -type shader esposta floatche determina l'altezza di base delle onde. Il valore della proprietà deve essere impostato nel materiale applicato alla mesh della superficie d'onda. Impostando questo valore su zero, la superficie d'onda diventa completamente piatta.

Il grafico di shader di esempio BasicWavyWaterSurface incluso (usato dal materiale con lo stesso nome) usa il sub-shader del vertice richiesto BuoyancyFieldWaves_VertexPosition per produrre la superficie 3D ondulata, ma include solo un'implementazione minima dello stand-in per lo shader del frammento, che lo rende il rendering della superficie come mesh non ombreggiata, di colore normale e semitrasparente.

Screenshot del grafico dello shader Basic Wavy Water Surface nell'editor dei graffi shader.

È possibile personalizzare il percorso Frammento di uno shader usato con il BuoyancyFieldWaves componente completamente in base alle proprie esigenze. Tuttavia, è essenziale che il percorso vertex dello shader usi il BuoyancyFieldWaves_VertexPosition grafico dello shader secondario e che esponga i quattro input a questo grafico dello shader secondario come floatproprietà shader del grafico shader generale in modo che il componente possa accedervi in fase di esecuzione. Se lo shader non include il grafico dello shader secondario necessario o se una delle proprietà dello shader necessarie non è esposta, il controllo del componente visualizzerà un messaggio di errore in fase di progettazione e la buoyancy non funzionerà in fase di esecuzione:

Screenshot delle opzioni dello script Buoyancy Field Waves che mostra il messaggio di errore: il sotto-shader dei vertici richiesto non è in uso.

Screenshot delle opzioni dello script Buoyancy Field Waves che mostra il messaggio di errore: proprietà shader non esposta dal materiale.

Il grafico dello shader di esempio BasicWavyWaterSurface può fungere da stand-in durante lo sviluppo di contenuti e come punto di partenza per gli sviluppi dello shader. In alternativa, è possibile prendere uno shader di superficie d'acqua esistente, mantenere il relativo percorso Fragment e sostituire solo il relativo percorso Vertex .

Velocità massima angolare

Esegue l'override della velocità massima angolare predefinita di un corpo fisico.

Screenshot delle opzioni dello script Max Angular Velocity nel controllo.

Il motore di fisica non permetterà al rigido di superare questa velocità angolare. Questo può essere utile per limitare la velocità di rotazione di un determinato rigidobody o per consentirlo di rotolare più velocemente del valore predefinito della fisica, che è 50 radianti al secondo (circa 8 rivoluzioni al secondo).

La velocità angolare massima deve essere immessa in radianti al secondo. Il valore immesso viene visualizzato anche in gradi al secondo (180 gradi ≈ 3,14 radianti) e rivoluzioni al secondo (1 rivoluzione = 360 gradi ≈ 6,28 radianti).

Campo della grandezza della velocità

Consente l'accelerazione/decelerazione di un corpo rigido fino a raggiungere una velocità compresa in un intervallo consentito.

Screenshot delle opzioni dello script Velocity Field in Inspector.Screenshot of the Velocity Field script options in the Inspector.

Questo componente controlla la grandezza della velocità e mantiene la direzione corrente. Se l'oggetto è ancora, sceglie una direzione casuale per la durata di un fotogramma. Esistono due modalità di funzionamento:

  • Se attaccato a un rigido, questo rigido sarà controllato.
  • Se collegato a un collisore di trigger, tutti i corpi rigidi che entrano in questo volume di trigger saranno interessati.

Impostazioni:

  • Il tipo di velocità definisce se stiamo lavorando sulla velocità lineare o angolare.
  • I limiti di velocità impostano i limiti desiderati di velocità minima e massima in metri al secondo (o radianti al secondo in caso di velocità angolare). Se la velocità corrente è inferiore al minimo accelera, se è più del massimo il corpo decelerate. Se la velocità corrente è già entro i limiti, lo script non ha alcun effetto. Per impostare una velocità di destinazione specifica, impostare il valore minimo e massimo sullo stesso valore.
  • L'accelerazione massima definisce l'accelerazione massima applicata per raggiungere la velocità di destinazione.
  • Il tipo di accelerazione definisce un tipo di accelerazione per raggiungere una velocità di destinazione.
    • Istantaneamente raggiungerà immediatamente il limite di velocità (uguale a Accelerazione costante con Accelerazione massima = Infinito).
    • L'accelerazione costante garantisce che il corpo raggiunga la velocità di destinazione indipendentemente dai limiti dell'impostazione Accelerazione massima.
    • Smooth Approach riduce l'accelerazione più vicina alla velocità di destinazione. Ciò significa che, in pratica, non raggiungerete mai la velocità di destinazione. Inoltre, dovrebbe esserci un'influenza esterna, come andare in salita o discesa, questa influenza extra non sarà completamente ignorata, causando una discesa più veloce che in salita.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Allinea campo

Allinea il corpo all'asse specificato.

Screenshot delle opzioni dello script Align Field (Allinea campo) in Inspector (Controllo).

Questo componente aggiunge coppia al corpo per allinearlo a una direzione specifica. Si noti che la coppia viene sempre applicata nella direzione che ruota il corpo verso il bersaglio. Esistono due modalità di funzionamento:

  • Se attaccato a un rigido, questo rigido corpo sarà allineato.
  • Se collegato a un collisore di trigger, tutti i corpi rigidi che entrano in questo volume di trigger verranno allineati.

Impostazioni:

  • L'asse del corpo rigido imposta l'asse del rigido interessato che deve essere allineato al bersaglio.
  • La modalità di allineamento offre diverse modalità per specificare l'allineamento della destinazione:
    • In Spazio globale per specificare l'allineamento della destinazione nello spazio globale.
    • In Spazio locale per specificare l'allineamento della destinazione nello spazio locale (ha senso solo con il volume del trigger).
    • Direzione della velocità per allineare il corpo alla velocità lineare.
    • Verso Game Object per allineare il corpo verso un gameobject di destinazione.
  • Allineamento destinazione imposta la direzione di destinazione dell'allineamento. (Solo quando La modalità di allineamento è impostata su Nello spazio globale o Nello spazio locale.
  • Target Game Object imposta la direzione di destinazione dell'allineamento. (Solo quando La modalità di allineamento è impostata su Verso l'oggetto gioco.
  • Il moltiplicatore coppia ridimensiona la coppia applicata per raggiungere l'allineamento target; un moltiplicatore più alto ruota il corpo più velocemente (tra 1 e 1000).
  • Il coefficiente di umidità imposta il fattore di smorzamento (compreso tra 0 e 5). Se impostato al di sotto di 1, il corpo potrebbe oscillare intorno all'orientamento target.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Campo direzione velocità

Permette di guidare un corpo rigido fino a quando la velocità raggiunge una direzione di destinazione.

Screenshot delle opzioni di script Campo direzione velocità in Inspector.

Questo componente controlla solo la direzione della velocità e mantiene la velocità corrente. Esistono due modalità di funzionamento:

  • Se attaccato a un rigido, questo rigido sarà controllato.
  • Se collegato a un collisore di trigger, tutti i corpi rigidi che entrano in questo volume di trigger saranno interessati.

Impostazioni:

  • Il tipo di velocità definisce se stiamo lavorando sulla velocità lineare o angolare.
  • Segui Game Object definisce se la destinazione è una direzione predefinita o una direzione verso un GameObject specifico. Funziona solo per la velocità lineare.
  • Corpo di destinazione (se Follow Game Object è impostato su true): imposta la direzione desiderata.
  • Direzione di destinazione imposta la direzione desiderata. Questo valore è normalizzato, quindi la grandezza non ha alcun effetto.
  • Direction In Local Space definisce se la direzione viene specificata in una trasformazione locale dell'esplosione.
  • L'accelerazione massima definisce l'accelerazione massima applicata per raggiungere la velocità di destinazione.
  • Il tipo di accelerazione definisce un tipo di accelerazione per raggiungere una velocità di destinazione.
    • Istantaneamente raggiungerà immediatamente la direzione di destinazione (uguale all'accelerazione costante con accelerazione massima = infinito).
    • L'accelerazione costante garantisce che il corpo raggiunga la velocità di destinazione indipendentemente dai limiti dell'impostazione Accelerazione massima.
    • Smooth Approach riduce l'accelerazione più vicina alla velocità di destinazione. Ciò significa che, in pratica, non raggiungerete mai la velocità di destinazione. Inoltre, se c'è un'influenza esterna come andare in salita o discesa, questa influenza extra non verrà completamente ignorata, causando una discesa più veloce che in salita.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Corpo magnetico

Dà al corpo una proprietà magnetica che attira o respinge altri corpi.

Screenshot delle opzioni dello script Corpo magnetico nel controllo.

Affinché questo componente funzioni, deve essere collegato a uno o più collisori. Questi collisori possono anche essere annidati nella gerarchia di trasformazione al di sotto di GameObject che ha questo componente collegato. Ogni collisore presenta una forza su altre rigidbodies che sono abbastanza vicine a questo collisore.

Impostazioni:

  • La forza definisce l'accelerazione del magnete al punto di contatto (quando la distanza tra collisori è zero).
  • Distance Of Influence controlla l'intervallo della forza magnetica. La forza magnetica viene applicata solo se la distanza più breve tra i collisi è più piccola.
  • Field Type definisce il modo in cui la forza magnetica si indeboli con la distanza.
    • Costante presuppone che la forza magnetica sia la stessa indipendente dalla distanza.
    • Lineare presuppone che la forza magnetica scende in modo lineare da Forza a zero (alla distanza di influenza).
    • Inversamente presuppone una dipendenza inversamente proporzionale alla distanza.
    • Quadrato inverso presuppone una dipendenza inversamente proporzionale alla distanza quadrata (simile a un magnete reale).
  • Il polo magnetico controlla gli oggetti che vengono attirati o respinti da questo oggetto.
    • Il Polo Nord attira il Polo Sud e respinge il Polo Nord.
    • Il Polo Sud attira il Polo Nord e respinge il Polo Sud.
    • Il magnetico attira sia il Polo Sud che il Polo Nord.
  • Disabilita gravità sul contatto: se questo è abilitato, e la forza del magnete è due volte più grande della gravità, la gravità è disabilitata per i corpi che sono in contatto con questo magnete. Uno degli oggetti deve essere statico per avere un effetto. Questo viene spesso usato per evitare lo scorrimento di corpi lungo un muro.

Esplosione sferica

Crea un'esplosione che fa sì che tutti i corpi all'interno di un raggio specifico si spostino verso l'esterno.

Screenshot delle opzioni dello script Esplosione sferica nel controllo.

La forza di esplosione dipende dalla massa di un rigido (e potenzialmente dalla distanza dal centro dell'esplosione).

Impostazioni:

  • La forza definisce l'effetto dell'esplosione sui corpi in metri al secondo. Il cambiamento effettivo della velocità è minore a seconda del tipo di esplosione e della massa critica (vedere di seguito).
  • Distance Of Influence controlla l'intervallo della forza di esplosione.
  • Field Type definisce il modo in cui l'effetto di esplosione si indeboli con la distanza.
    • Costante presuppone che l'effetto sia indipendente dalla distanza.
    • La goccia lineare presuppone che l'effetto scende dal massimo allo zero (in corrispondenza della distanza di influenza).
  • La massa critica definisce la massa del corpo non influenzata dall'esplosione. I corpi più pesanti sentono meno effetto dei corpi più leggeri. Ad esempio, un rigido che pesa un terzo della massa critica sentirà due terzi del cambiamento di velocità.
  • Angular Impulse Scale definisce la posizione in cui viene applicata la forza. Se impostato su 0, la forza viene applicata al centro della massa, ovvero nessuna rotazione. Se impostato su 1, la forza viene applicata al punto più vicino all'esplosione.
  • Occlusione Se abilitata, gli oggetti nascosti dietro altri oggetti non sentono l'esplosione. Solo un singolo raggio tra il centro dell'esplosione e il centro di massa viene controllato per l'occlusione.

Esplosione direzionale

Crea un'esplosione che provoca lo spostamento di tutti i corpi all'interno di un trigger in una direzione specifica.

Screenshot delle opzioni dello script di eplosion direzionale in Inspector.

La forza di esplosione dipende dalla massa di un rigido. Affinché questo componente funzioni, deve essere collegato a un collisore di trigger. Tutti i corpi all'interno del collisore del trigger sono interessati.

Impostazioni:

  • La forza definisce l'effetto dell'esplosione sui corpi in metri al secondo. Il cambiamento effettivo della velocità è minore a seconda della massa critica (vedere di seguito).
  • La direzione definisce la direzione dell'esplosione. Questo valore è normalizzato, quindi la grandezza non ha alcun effetto.
  • Direction In Local Space definisce se la direzione viene specificata in una trasformazione locale dell'esplosione.
  • La massa critica definisce la massa del corpo non influenzata dall'esplosione. I corpi più pesanti sentono meno effetto dei corpi più leggeri. Ad esempio, un rigido che pesa un terzo della massa critica sentirà due terzi del cambiamento di velocità.
  • Angular Impulse Scale definisce la posizione in cui viene applicata la forza. Se impostato su 0, la forza viene applicata al centro della massa, ovvero nessuna rotazione. Se impostato su 1, la forza viene applicata al punto più vicino all'esplosione.
  • I corpi interessati definiscono le condizioni di filtro facoltative per i corpi interessati da questo componente. Per impostazione predefinita, tutti i corpi sono interessati.

Stabilizzazione congiunta

Stabilizza il sistema di vincoli regolando il tensore inerzia del rigido.

Screenshot delle opzioni dello script Di stabilizzazione congiunta nel controllo.

Lo script funziona su tutti i bambini con il componente Rigidbody o Joint collegato.

Impostazioni:

  • Il fattore di stabilizzazione definisce quanto si sacrifica la correttezza fisica per la stabilità. Ad esempio, 1> - per lo più fisica corretta, 4 -> compromissione, 10 -> stabile con artefatti.
  • La proiezione congiunta abilita la proiezione dei vincoli su tutti gli elementi figlio. Questo può migliorare notevolmente la stabilità, ma sacrifica la correttezza fisica. Funziona solo su articolazioni configurabili e caratteri.
  • La distanza di proiezione definisce la violazione massima consentita dei vincoli. Per evitare problemi di fisica, provare a impostare questo valore il più alto possibile.

Superficie di rimbalzo

Crea una superficie di rimbalzo che causa il rimbalzo di tutti gli oggetti in collisione con una velocità predefinita.

Screenshot delle opzioni di script di Surface Bouncing nel controllo.

Impostazioni:

  • Bounce Velocity Magnitude definisce la grandezza minima e massima velocità dell'oggetto dopo il rimbalzo. Vedi Effetto rimbalzo per informazioni su come viene determinata la direzione. Impostare Min e Max su uguale valore se si desidera specificare una singola velocità di destinazione.
  • L'effetto rimbalzo definisce il comportamento previsto degli oggetti rimbalzi.
    • Rimbalzo perfetto: l'angolo della velocità in ingresso alla normale del piano di collisione è uguale all'angolo della velocità in uscita.
    • Imposta velocità grandezza: l'angolo della velocità in uscita su normale è influenzato dall'attrito.
    • Imposta Velocità normale: simile a Set Velocity Magnitude, ma la grandezza della velocità di rimbalzo definisce la grandezza della velocità perpendicolare al piano (velocità normale).
    • Rimbalza verso il corpo target: la direzione della velocità in uscita viene indirizzata verso un corpo di destinazione. Se questa opzione è selezionata, viene visualizzata la proprietà Corpo di destinazione e deve essere impostata.
  • L'attrito controlla la velocità tangente persa in caso di collisione. Se impostato su 0, l'oggetto rimbalzante mantiene la velocità tangente. Se impostato su 1, l'oggetto rimbalza in direzione perpendicolare alla superficie (la velocità tangente è 0). Per i valori superiori a 1, l'oggetto rimbalza all'indietro.

Offset centrale di massa

Sfalsa il centro della massa di un rigido.

Screenshot delle opzioni di script Center Of Mass Offset nel controllo.

Impostazioni:

  • Offset Nelle coordinate locali definisce l'offset nelle coordinate locali.

Ambito fisico locale

Tutti i rigidbodies nella gerarchia in questo componente non verranno sincronizzati tra i client. Questo script deve essere aggiunto a rigidbodies le cui posizioni o rotazioni sono impostate tramite uno script visivo o un'animazione.

Screenshot delle impostazioni ambito fisica locale nel controllo.

Informazioni sui nodi eventi di fisica di Visual Scripting mesh.

Lancia traiettoria

Calcola la posizione futura del rigido nello spazio libero sotto l'effetto della gravità.

Screenshot delle opzioni dello script Throw Trajectory (Genera traiettoria) in Inspector (Controllo).

Impostazioni:

  • Modalità Rigidbody: se impostata su true, la posizione e la velocità del corpo rigido vengono prese come condizioni iniziali. Abilita il calcolo della posizione futura in tempo reale.
  • Rigidbody (si applica solo quando la modalità Rigidbody è impostata su true).): definisce quale rigida viene presa.
  • Velocità iniziale: (si applica solo quando la modalità Rigidbody è impostata su false): definisce la velocità iniziale. La posizione iniziale viene presa dalla posizione del GameObject a cui è collegato questo componente.
  • Numero massimo di punti: definisce il numero massimo di punti calcolati.
  • Tempo: definisce la differenza di tempo tra le posizioni future.
  • Gravità: questa è l'accelerazione gravitazionale.
  • Renderer di riga: specifica il renderer di riga in cui viene copiata la posizione dei punti. Viene visualizzata la traiettoria di lancio.

Reimposta trasformazioni corpo

Quando attivato da uno script visivo, questo componente reimposta la posizione e la rotazione di tutti i corpi fisici nella stessa trasformazione o in qualsiasi trasformazione figlio nei valori iniziali.

Screenshot del componente Reset Body Transforms (Reimposta trasformazioni corpo) nel controllo.

Impostazioni:

  • Salvataggio automatico iniziale: se selezionato, usare le trasformazioni all'avvio dell'ambiente come trasformazioni di reimpostazione. Se non è selezionata, è necessario usare uno script visivo per chiamare la funzione Save Body Transforms Now per salvare le trasformazioni di reimpostazione prima di eseguire una reimpostazione.

Funzioni disponibili per gli script visivi

  • Reimposta trasformazioni corpo ora: reimposta la posizione e la rotazione di tutti i corpi fisici nell'ambito di questo componente Reset Body Transforms nelle trasformazioni di reimpostazione salvate più di recente. Richiama questo solo su un client.

Screenshot del componente Reimposta trasformazioni corpo in modalità di modifica con il pulsante Reimposta trasformazioni corpo ora solo in modalità di riproduzione evidenziato.

Screenshot del componente Reimposta trasformazioni corpo in modalità di riproduzione con il pulsante Reimposta trasformazione corpo ora evidenziato.

  • Salva trasformazioni corpo Salva ora la posizione corrente e la rotazione di tutti i corpi fisici nell'ambito di questo componente Reset Body Transforms come trasformazioni di reimpostazione. Richiama questo solo su un client.

Passaggi successivi