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.
Il clip di animazione usato dall'animazione di riproduzione automatica può usare qualsiasi modalità di wrapping. Le scelte utili sono "Loop" e "Ping Pong".
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.
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.
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.
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.
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.
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.
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.
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
float
che verrà continuamente aggiornata da questo componente ogni fotogramma con un tempo in continuo aumento (misurato in secondi) sincronizzato tra tutti i client. IlBuoyancyFieldWaves_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
float
che 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
float
che 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
float
che 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.
- Tempo controllato dallo script è il nome di una proprietà -type shader esposta
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.
È 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 float
proprietà 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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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à.
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.
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.
- 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.