Noticias

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

¿Como modificar el parametro Center de un CharacterController?

Iniciado por ftejada, Julio 13, 2015, 12:38:34 AM

Tema anterior - Siguiente tema
Hola gente!!!
 
Estoy tratando de modificar el parametro Center de un CharacterController que creo en tiempo de ejecucion... lo hago mediante el siguiente codigo

mCharacterController.center.Set(0f, 1f, 0f); //Para que el gameObject al que está attached esté tocando el suelo

El caso es que el Center del CharacterController no se modifica y no se que hago mal.....
 
Alguien puede ayudarme??
 
Saludos y gracias.

Dame mas informacion, ¿Que character controler estas intentando modificar? ¿Para que quieres modificar el centro? ¿Tiene que ver con algo de fisicas, es para cambiar el punto de giro del character controler?
 
Saludos.

Cita de: esr date=1436774319Dame mas informacion, ¿Que character controler estas intentando modificar? ¿Para que quieres modificar el centro? ¿Tiene que ver con algo de fisicas, es para cambiar el punto de giro del character controler?
 
Saludos.
Pues es el characterController de unos cochecitos que tengo.... Quiero modificar el Center porque inicialmente me sale con la forma standar y la "malla" de los car se me queda suspendida en el aire.... No se si me explico... El tema está que los cars los tengo inicialmente sin el characterController por ciertos motivos... y cuando le doy al play, les creo el characterController a cada car via script. Pero no puedo modificar el parametro Center que es el que mueve el collider de sitio....
 
Se que me puedes decir que le cree el CharacterController mediante la interface grafica y le modifique el parametro Center mediante el Inspector...
Basicamente lo que estoy haciendo es una clase que me controle la fisica con la que interacturán los objetos entre si.... es decir pulsando una tecla cambio a RigidBody y volviendola a pulsar destruyo el RigidBody y les creo un CharacterController....
 
Un saludo y gracias por contestar....

Buenas, estas utilizando el car controler que trae Unity? Primero comprueba que en el rigibody esta activada la gravedad del objeto, despues recuerda que no tienes que obtener el Collider del objeto, no es script del contoler, todos los Collider llevan el Center que es en tu caso el que hay q modificar.
 
Saludos.

Cita de: esr date=1436822119Buenas, estas utilizando el car controler que trae Unity? Primero comprueba que en el rigibody esta activada la gravedad del objeto, despues recuerda que no tienes que obtener el Collider del objeto, no es script del contoler, todos los Collider llevan el Center que es en tu caso el que hay q modificar.
 
Saludos.
car controller?????? que existe un car controller???? yo utilizo un CharacterController para los cochecitos. Un CharacterController que creo de la siguiente manera en tiempo de ejecucion....

AddComponent<CharacterController> ()

Y la verdad es que no se a que te refieres con lo de que compruebe que en el RigidBody este activada la gravedad del objeto  . Creo que no estas entendiendo lo que pasa o hay algo que desconozco....
 
Por lo que tengo entendido RigidBody y CharacterController son dos tipos de componentes totalmente distintos. Y el problema lo tengo cuando a los car´s les añado un CharacterController en vez de un RigidBody... con que no se muy bien a qué viene el tema de que compruebe si la gravedad está activada en el rigidbody del car debido a que no existe dicho componente.
 
A ver si logro explicarme..... creo un GameObject, y le doy al play.....
..... en tiempo de ejecución le creo a ese GameObject un CharacterController via script. Pero ese characterController al crearse se posiciona de manera standar y hace que mi malla quede suspendida en el aire....
 
Ver imagen adjunta
 
En la imagen se ve como el parametro Center del CharacterController esta a (X = 0, Y = 0, Z = 0)....
 
Yo simplemente quiero poder modificar esos parametros via script en tiempo de ejecución......
En teoria con esto debería cambiarse

this.getComponet<CharacterController>().center.Set(...);

O al menos eso creia yo, porque no consigo variar sus valores pese a muchas pruebas que he hecho...
 
No se si ahora ha quedado más claro....
 
Alguien puede ayudarme por favor...
 
Saludos y gracias por contestar

Vale me contesto yo mismo.... hay veces que no te das cuenta de cosas sencillas por llevar cuarenta cosas a la vez...
 
La manera de poder acceder y modificar el parametro center de un CharacterController es mediante la siguiente sentencia

this.getComponent<CharacterController>().center = new Vector3(aqui ponemos los valores que queramos);

Me despisto la función CharacterController.center.Set y me cegué. Pero cuando una variable es publica de cualquier componente la manera de cambiar su valor es con un simple "="
 
Es decir si queremos cambiar por ejemplo la variable Mass de un RigidBody deberiamos hacer lo siguiente:

this.GetComponet<RigidBody>().mass = 45f;

Saludos y gracias por contestar esr

Julio 14, 2015, 01:22:55 PM #6 Ultima modificación: Julio 14, 2015, 01:24:51 PM por esr
Te lo estaba escribiendo ahora mismo lo del igual. Aunque si vas hacer un juego de coches mirate los Rigibodys por que con los character controler vas a tenerte que programar tu las fisicas. Y tambien mirate el assets de vehiculos de Unity que traen muchas cosas hechas.
 
Saludos

Cita de: esr date=1436872975Te lo estaba escribiendo ahora mismo lo del igual. Aunque si vas hacer un juego de coches mirate los Rigibodys por que con los character controler vas a tenerte que programar tu las fisicas. Y tambien mirate el assets de vehiculos de Unity que traen muchas cosas hechas.
 
Saludos
Si, en ello estoy... de momento estoy tanteado la mejor manera de hacerlo.
 
El tema está que aunque con los rigidbody unity te interpreta las fisicas.... de momento no consigo unos resultados medianamente aceptables....
Es decir, lo primero que hago es rotar el Transform de los cars mediante sleerp, para que apunten hacia el objetivo al que tienen que ir de forma suave y despues los coches los desplazo siempre hacia su foward con addForce(Vector3).
El caso es que cuando giran parece que estuviesen en una pista de hielo, ya que resbalan.... He probado a cambiar el dinamicFriction del material fisico que llevan, pero ese efecto de patinaje no termina de desaparecer y su velocidad de desplazamiento disminuye mucho.... y eso no me conviene.
 
He probado tambien la función Rigidbody.MovePosition(), y con esta el efecto de patinar queda solucionado.... el problema con esta funcion es que cuando los coches chocan entre si o con otros elementos, no parecen reaccionar a dichas colisiones... es decir, que siguen su camino como si no hubiesen chocado con nada.
 
No se... si alguien puede aportarme ideas o algo.....
 
Saludos y gracias.

Julio 16, 2015, 01:31:22 AM #8 Ultima modificación: Julio 16, 2015, 01:31:41 AM por antoniomdk
Para seguir dándole vueltas a lo del center, jaja. Por normal general para asignar cualquier valor a un Vector se le aplica una asignación normal y corriente "=" teniendo en cuenta que el Vector3 es una estructura de datos pues hay que crearla con el new Vector3() y dentro metes los datos que quieras. Para que el Rigidbody funcione debes añadirle un colisionador y asegurarte que no está tildada "isKinematic". Para los coches que he visto ahí podrías componerlos de un cubo y 2 cilindros, o una esfera. Si buscas rendimiento usa esferas mejor, son las más livianas de procesar jeje

Cita de: antoniomdk date=1437003082Para seguir dándole vueltas a lo del center, jaja. Por normal general para asignar cualquier valor a un Vector se le aplica una asignación normal y corriente "=" teniendo en cuenta que el Vector3 es una estructura de datos pues hay que crearla con el new Vector3() y dentro metes los datos que quieras. Para que el Rigidbody funcione debes añadirle un colisionador y asegurarte que no está tildada "isKinematic". Para los coches que he visto ahí podrías componerlos de un cubo y 2 cilindros, o una esfera. Si buscas rendimiento usa esferas mejor, son las más livianas de procesar jeje
Buena contestación pero irrelevante para el problema en cuestion que me ataña... jajajaja.... pero muchas gracias por contestar.
 
Vuelvo a repetirlo para refrescar la memoria del asunto que no consigo solucionar en este momento. Y es que el al mover un gameObject con su rigidbody.AddForce(...), en los giros ese gameObject patina como si estuviese en una pista de hielo. Y me gustaría quitar ese efecto de patinaje...
 
Mi propio post de ahí arriba para que lo leais mas comodamente
 

 
El tema está que aunque con los rigidbody unity te interpreta las fisicas.... de momento no consigo unos resultados medianamente aceptables....
Es decir, lo primero que hago es rotar el Transform de los cars mediante sleerp, para que apunten hacia el objetivo al que tienen que ir de forma suave y despues los coches los desplazo siempre hacia su foward con addForce(Vector3).
El caso es que cuando giran parece que estuviesen en una pista de hielo, ya que resbalan.... He probado a cambiar el dinamicFriction del material fisico que llevan, pero ese efecto de patinaje no termina de desaparecer y su velocidad de desplazamiento disminuye mucho.... y eso no me conviene.
 
He probado tambien la función Rigidbody.MovePosition(), y con esta el efecto de patinar queda solucionado.... el problema con esta funcion es que cuando los coches chocan entre si o con otros elementos, no parecen reaccionar a dichas colisiones... es decir, que siguen su camino como si no hubiesen chocado con nada.
 
No se... si alguien puede aportarme ideas o algo.....
[/quote]
 
Se que es una cuestión fisica/matematica la causa de por lo que pasa ese efecto de patinaje..... ¿Como puedo solucionarlo? ¿rotando el gameObject mediante torque para que enfoque al objetivo a donde se tiene que desplazar y despues aplicandole el addForce??? Aunque creo que sería lo mismo.... ya que por lo que creo addForce imprime una fuerza en una direccion concreta en este frame, pero al siguiente frame esa fuerza aplicada en el anterior, sigue "estando" pero en menor medida debido a la friccion y a la resistencia de aire.
 
Con que si le aplico una nueva fuerza en otra direccion esta se aplicará, pero el gameObject seguirá viendose influenciado por la fuerza que le apliqué en el frame anterior.... con lo que seguiría teniendo ese efecto de patinaje o derrape....
 
Alguna idea de como solucionar esto.....?? ¿Existe alguna función en la Api para quitar la fuerza que se le haya aplicado a un gameObject?
 
He pensado una cosa pero necesito una funcion que me indique el vector3 exacto de la fuerza que influencia a un gameObject en un frame concreto... con esto podría multiplicar ese vector3 * -1f para que adquiriese el sentido contrario y poder aplicarselo de nuevo al gameObject y así anular por completo el efecto de dicha fuerza inicial... no se si me he explicado.
 
¿Con qué función obtengo la fuerza que influencia a un gameObject en un frame dado??
 
Saludos

Etiquetas: