2015-12-20 7 views
5

Sto provando a simulare l'auto che gira con HingeJoint (o giunto configurabile) nel motore di gioco Unity.Modifica asse di articolazione della cerniera tramite script in Unity

Ho 4 ruote attaccate al corpo principale con le articolazioni, ciò che funziona bene. Ora ho bisogno di cambiare l'asse dei giunti (rispetto al corpo principale) con uno script di controllo per far girare le ruote. Fa quello che mi serve se cambio il valore Z dell'asse nell'ispettore (ruotando l'asse rispetto al corpo principale), ma quando provo a cambiare l'asse Z nella sceneggiatura, le cose impazziscono. Mi sembra che l'asse sia relativo al corpo del genitore prima di eseguire il gioco, ma quando lo esegui, l'asse diventa forse assoluto o qualcosa del genere.

Stavo cercando di trovare una risposta per un po 'di tempo, ma non sono riuscito a trovare nulla relativo all'asse.

L'unica cosa che ho trovato è di circa TargetRotation (sul giunto configurabile), ciò che in realtà non è quello che sto cercando perché credo che è necessario impostare dei limiti in un altro asse per farlo funzionare, rendendo così le articolazioni già elastici oscillare ancora di più. Ovviamente, ho bisogno che il risultato sia il più rigido possibile. Ancora se hai qualche idea su come farlo con TargetRotation fammi sapere per favore, perché non ero ancora in grado di riconoscere come effettivamente funziona.

Credo che la domanda sia abbastanza semplice, ma se ritieni che la domanda non sia abbastanza chiara fammelo sapere, quindi aggiungerò alcune immagini per una spiegazione migliore.

EDIT: Beh, l'aggiunta di un po 'di informazioni è stato suggerito Quindi qui si va:

Ecco quello che ho enter image description here

Come u vede la sua semplice scatola con 4 cilindri collegati alla scatola con configurablejoints . Tutti gli elementi si trovano sullo stesso livello di radice e sono associati a corpi rigidi.

Nei cerchi rossi è possibile vedere diverse rotazioni dell'asse fatte cambiando i valori dell'asse Z (da -1 a 1) nell'ispettore, cosa è esattamente ciò che devo fare per guidare il veicolo.

Purtroppo quando aggiungo l'asse del controller Z nello script del genere:

 float steering = Input.GetAxis("Horizontal"); 
     configurableJoint.axis = new Vector3(configurableJoint.axis.x, configurableJoint.axis.y, steering); 

Si rompe in questo modo: enter image description here

Quindi quello che vorrei è qualche idea di come tale funzione potrebbe essere raggiunto, come così come qualcuno che possa spiegarmi come funzionano gli assi delle articolazioni sarebbe bello.

Grazie in anticipo per qualsiasi sforzo

+0

Aggiungi ulteriori informazioni sul comportamento che stai vedendo, schermate e frammenti di codice aiuteranno le altre persone ad aiutarti. –

+0

Davvero non penso che le articolazioni di cerniere possano essere usate in quel modo che conosci l'uomo? Non è proprio quello per cui sono per niente. Molto semplicemente, tu "usi una trasformazione".cioè il gruppo ruota è figlio del telaio. questo è tutto ciò che c'è da fare. (basta '.Rotate' il bambino si trasforma - non è un grosso problema – Fattie

+0

Vale la pena notare che è un'ingegneria incredibilmente complicata per costruire un impianto di perforazione per auto: ci vogliono 1-2 anni di lavoro. la famosa "Edy's Vehicle Physics" dal punto di vendita (o uno dei nuovi concorrenti di Edy !!) È così difficile che non ci siano davvero sforzi wiki, community, ecc. Inoltre è completamente cambiato w/Unity 5 dato che sono totalmente cambiato "wheel collider" (che era incredibilmente bizzarro e ora sono semplicemente bizzarri). – Fattie

risposta

0

Sto indovinando che si avrebbe bisogno di genitore le ruote al corpo della vettura, e quindi ruotare le ruote rispetto al corpo macchina nello script.

Sarebbe utile se fosse possibile fornire un semplice progetto Unity che potrebbe essere scaricato, sperimentato e ottimizzato per duplicare il problema e risolverlo. Sono felice di dare una mano se vuoi inviare una semplice dimostrazione del problema, così posso provare a risolverlo.

Problemi correlati