Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Problemón con inclinacion de moto

Iniciado por Jordi432, Agosto 02, 2016, 06:03:19 PM

Tema anterior - Siguiente tema
Agosto 02, 2016, 06:03:19 PM Ultima modificación: Agosto 02, 2016, 06:05:42 PM por Jordi432
Ya veo que habia que presentarse antes de preguntar jeje..
 
Al lio, estoy con un intento de juego de moto que he conseguido hacerla funcionar, girar, etc. peeero, cuando hago la inclinacion de la moto pasan cosas raras, la rueda delantera que gira se vuelve loca, la moto da saltitos surrealistas, si le doy más velocidad no gira y lo peor, se va al suelo todo el rato.
 
Son muchas cosas pero poco a poco. Quiero empezar por lo de que se va al suelo. He probado de todo, aplicando fuerzas, torques, con piloto encima, sin él....nada funciona. Ahora lo tengo con 4 bolitas cerca del suelo y hace que no caiga tan rápido, pero acaba tambien tumbada.
 
Bueno, cuelgo imagen de lo que es que quiero que haga, pero no encuentro como, es simplemente aplicar una fuerza contraria de hacia donde se tumba, para que se estabilice. No se si es moviendo el centerofmass. Aplicar la fuerza a la moto hace que se desplace toda (supongo que la aplica a todo el eje) y en el bicho de arriba tampoco me funciona. Seria detectar el angulo de inclinación (que tampoco se como y he probado mil cosas) y cuando llegue a cierto punto que una fuerza contraria la pare.
 
Lo dicho, pistas, sugerencias, ayuda porfa... necestito respuestas para un noob, que pueda entender...
 
GRACIAS!!
 

Agosto 02, 2016, 06:53:53 PM #1 Ultima modificación: Agosto 02, 2016, 06:54:14 PM por Jordi432
Pues nada, como un 90% de las veces me autorespondo y queda feisimo. Es preguntar y encontrar la respuesta...estoy usando este script http://answers.unity3d.com/questions/528298/bike-physics.html y hay una parte que pone estabilizar moto...ahi esta en un angulo de 40, lo he puesto a 35 y ya no se cae...en fin, soy un noob y me bloqueo xD
 
Dejo este hilo abierto por si surjen mas dudas.
 
Un saludo.

Si ponía estabilizar moto, hecho está. No hay nada como los paquetes de scripts para empezar y teclear más en el foro que en el editor de código.

Agosto 11, 2016, 12:31:50 PM #3 Ultima modificación: Agosto 11, 2016, 04:10:47 PM por Jordi432
Buenas. Si, la verdad es que el estabilizar funciona muy bien, pero no hay manera de hacer funcionar bien que cuando dejes de apretar las flechas vuelva a la posicion recta la moto. Cuando voy en direccion recta va bien, igual que cuando va en horizontal (respecto a la posicion inicial que sale la moto), cuando das la vuelta y vas tambien marcha adelante pero volviendo al punto de salida, o sea, que vas en vez de hacia arriba, hacia atrás, la moto cae al girar, y no se como arreglarlo. Lo que hago es detectar la inclinación y cuando dejas de apretar le pongo un "target" hacia el otro lado hasta que esta en el centro, y va bien, menos cuando digo, aquí está el código:
 

//INCLINACION MOTO AL GIRAR

var tiltAroundZ = -(Input.GetAxis("Horizontal") * tiltAngle);
var target : Vector3;
target = Vector3 (0,0,tiltAroundZ);

var deltaRotation : Quaternion = Quaternion.Euler(target * Time.deltaTime *3);

if(CurSpeed >15)
{
   GetComponent.<Rigidbody>().MoveRotation
   (GetComponent.<Rigidbody>().rotation * deltaRotation);
   
}
if(Input.GetButton("Horizontal") == false)
{
if(GetComponent.<Rigidbody>().rotation.z > 0){
target.Set(0,0,-20);
deltaRotation = Quaternion.Euler(target * Time.deltaTime * 3);
GetComponent.<Rigidbody>().MoveRotation(GetComponent.<Rigidbody>().rotation * deltaRotation);
}
if(GetComponent.<Rigidbody>().rotation.z < 0){
target.Set(0,0,20);
deltaRotation = Quaternion.Euler(target * Time.deltaTime * 3);
GetComponent.<Rigidbody>().MoveRotation(GetComponent.<Rigidbody>().rotation * deltaRotation);
}
}    

 
No le veo el fallo si funciona a medias :S
 
Salu2
 
 
 
-- EDIT --
 
 
 
Añado info: ya se donde está el problema, y es que no consigo encontrar una funcion que me de la rotación siempre igual, seria, si se tumba a la derecha, -30 (por ejemplo), si se tumba a la izquierda, 30. Asi tendría ya el if que necesito para luego aplicar la "fuerza" contraria. Todo esto sin el Input.getAxis que se usa en todo el Script...todos los valores que he encontrado van variando segun se mueve la moto por el mapa, y el eulerangles que es el que mas se acerca, da valor positivo hacia los dos lados....así que sugerencias???

Prometo que había leído "Pokemón con inclinación de moto". Hasta aquí de saturación :D

Utilizando Vector3.Angle.
 
Si el angulo entre Vector3.up y tranform.right es mayor al angulo entre Vector3.up y -transform.right, se encuentra inclinada a la derecha.

Cita de: kaito date=1470950293Utilizando Vector3.Angle.
   
   
      Si el angulo entre Vector3.up y tranform.right es mayor al angulo entre Vector3.up y -transform.right, se encuentra inclinada a la derecha.
   


Funciona ultraperfecto, millones de gracias!!! Ahora queda retocar detalles como que se pueda tirar adelante o atras la moto en el aire y ya para rizar el rizo que sea más suave cuando se aplica la fuerza para contrarrestar el giro, que hace como saltos, ya lo iré haciendo.
 
 
 
Cita de: iRobb date=1470946140Prometo que había leído "Pokemón con inclinación de moto". Hasta aquí de saturación :D
   


Que daño hace el Pokemon GO xDDDDD
 
Salu2.

Agosto 14, 2016, 05:27:54 PM #7 Ultima modificación: Agosto 14, 2016, 06:05:00 PM por Jordi432
Venga va, si consigo esta ya sera la repera...aun no entiendo bien como funciona la moto, porque si se supone que es un objeto con "partes", debería poder aplicar una fuerza al rigidbody solamente, por ejemplo, al manillar. Así aplico la fuerza en Y hacia arriba en el manillar y la rueda de delante se levanta, que es lo que quiero consegir. He probado desplazando el centerofmass y lo hace, pero se desestabiliza. También he probado rotando pero rota sobe el punto central, esto sería una opción, rotar soble la rueda trasera y se levantaría la delantera. Bueno, mientras voy probando cosillas si alguien me da una pista pues termino antes ;-)
 
--Añado--
 
Vale, esto funciona:
 
GetComponent.<Rigidbody>().AddForceAtPosition(Vector3(0,300,0),

            Vector3(GetComponent.<Rigidbody>().position.x,

            (GetComponent.<Rigidbody>().position.y)+5,(GetComponent.<Rigidbody>().position.z)+10));
 
Pero como siempre cuando giras ya no vale, necesito cosas que se apliquen al objeto, no desde un punto global.
 
 
 
 

Me autorespondo de nuevo, problema solucionado gracias a los compis de Gamedev Stackexchange, el código es este:
 

public var force : Vector3;
public var forcePosition : Transform;
private var rbody : Rigidbody;
(on update function)
if(Input.GetKey(KeyCode.F) && Input.GetKey(KeyCode.UpArrow) && curGear >0)
{
var setPositionForce = Vector3(forcePosition.position.x,forcePosition.position.y,
forcePosition.position.z);
rbody.AddForceAtPosition (force, setPositionForce);
}

 
He creado un empty object a partir de la moto y lo he colocado en la rueda de delante. Luego aplico la fuerza ahí y listo, funciona exactamente como quiero que lo haga.
 
Gracias!!

Etiquetas: