Noticias

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

Personaje atraviesa el suelo

Iniciado por unit3ro, Agosto 05, 2015, 01:21:36 AM

Tema anterior - Siguiente tema
Hola a todoEstoy usando un raycast para evitar que mí personaje atraviese el piso porque no estoy usando colicionadores pero a menudo lo atraviesa. Parece que en algún frase no detecta nada. Me he fijado que con los whellcoliders no sucede eso. Mí pregunta es, que debo hacer para que funcione como los whellcoliders? Sería porque están hechos en código interno osea del?Gracias 

Creería que los castores de Alemania son, pero Charly Garcia hace Rock interno, Conoce alguien a madona?, que debo hacer con?

Agosto 05, 2015, 03:39:47 PM #2 Ultima modificación: Agosto 05, 2015, 04:04:46 PM por unit3ro

Supongo que ahora debo reírme por tu chiste. Si no estás dispuesto a ayudar no estropees mi solicitud de ayuda, es obvio que el corrector del celular lo hizo de nuevo, lo escribí mientras iba conduciendo y tuve que ahorrar palabras.  Esto era lo que queria escribir:

Hola a todosEstoy usando un raycast para evitar que mí personaje atraviese el piso ya que no puedo usar colicionadores para lo que quiero lograr, pero a menudo atraviesa el suelo. Parece que en algún frame no detecta nada. He hecho unas pruebas usando wheelColliders y me he fijado que no sucede lo mismo que usando un raycast, siempre detectan el suelo y no lo atraviesan. Mí pregunta es, que debo hacer para que funcione como los wheelColliders? Sería porque están programados en código interno osea dll y son mas optimos?Ignoren los terminos que no vienen al coso, no conozco mucho sobre el tema.Gracias [/quote]

o.O lo has arreglado jajajaja mejor hubiera sido no dar la replica porque creo que el comentario de francoe no iba por faltas de ortografia o comerte palabras, es que directamente no se entiende lo que estas preguntando.pero si dices que escribiste en un foro sobre unity (aunque la realidad es que da igual donde escribieras) mientras conducias, mas que un chiste merecerias una colleja como minimo a parte de que te hubieran pillado los monillos. mucha suerte

No se que estas queriendo lograr, pero sin problemas te ayudo.Primero, debes analizar por que vas a no utilizar un Colisionador (Raycast hereda de Physics) de modo que estas utilizando colisionadores de igual manera, entonces, ¿Por que no utilizas un Box Collider, o Line o lo que sea?.Segundo, Todo lo que salga de la clase Physics se debe ejecutar desde FixedUpdate para evitar justamente que Falle la física.Tercero, Esta demás decirte que para que las físicas funcionen deberás tener Rigidbody en ambos dos cuerpos.Cuarto, ¿Que necesidad de escribir manejando?, esto dice que no has pensado las cosas, actúas con impulso, no conoces muy bien como trabajan las cosas y el problema es que no te estas informando como debe ser, en mi canal de YT vas a encontrar explicacion muy simple sobre muchas cosas que te servirán para avanzar.Suerte, un pequeño consejo, piensa tu pregunta, por que no es obligación contestar preguntas sin un objetivo claro, antes de formularla pensa el problema, resumirlo, pensa tu posible solución y comentarla, y por ultimo haz una imagen descriptiva de todo lo que hayas argumentado posteriormente.  

Agosto 06, 2015, 12:26:49 AM #5 Ultima modificación: Agosto 06, 2015, 12:29:28 AM por unit3ro
Hola, que talEntiendo a la perfección, este es mi caso.Mi personaje tiene adjunto por todo el cuerpo capsuleColliders como http://unity3d.17xdy.com/wp-content/uploads/2015/07/AnimFollow.jpg">animFollow, pero serán usados como trigers, para detectar cuando este en contacto con el escenario. Los uso como trigers para que no queden atascados en el escenario como suele pasarle mucho al personaje de animFollow.Entonces estoy buscando la forma para que el personaje detecte el suelo pero usando un raycast en cada pie a veces parece no funcionar, es posible que sea porque lo estoy haciendo en Update() y no en FixedUpdate, lo probare. Buscando una solución intente con wheelColliders, si ya sé que es una locura porque no es un vehículo, pero funciona perfectamente, salvo que cuando el personaje se sitúa en una superficie a una altura considerablemente diferente a la anterior sale despedido hacia el cielo con un salto exagerado, se podría eliminar este molestoso efecto? en tal caso voy a probar con fixedUpdate y luego les cuento los resultados.Gracias por tu atencion

Jamas podrás hacer eso, es algo sumamente tonto, en principio nunca quedaría estable, y la altura del jugador seria totalmente inestable. Utiliza los Capsule Colliders para las partes del cuerpo, pero también utiliza un capsule collider para generalizar todo.Y realmente no se que que "Entiendes perfecto" por que estas teniendo muchísimos errores de concepto e implementacion. 

Agosto 06, 2015, 03:23:32 PM #7 Ultima modificación: Agosto 06, 2015, 03:36:20 PM por unit3ro
Para lo que quiero hacer, usar un capsule collider general que cubra el personaje es una estupides descomunal, ese estupido metodo es el mas torpe, la capsula no tiene la forma de una persona y nunca se relacionara con su entorno de manera similar a una persona, por ejemplo una caja rozando con una superficie nunca tendra la misma reaccion que una esfera en cuanto a rozamiento se refiere, olvida eso que es a lo que estoy reullendo, mi personaje estara saltando por todos lados y metiendose en espacios estrechos por eso la idea de usar trigers, nos estamos saliendo del tema.Mi meta es que dos raycast o dos spherecast (preferiblemente para mas precicion) determinen la posicion de los pies y hacer una media entre las dos alturas de contacto que sera la altura del personaje, eso esta solucionado y es estable el problema es que no siempre me detecta la superficie debajo y la traspasa, solo eso. cuando tenga tiempo hare pruebas en fixedupdate.Cuando digo "entiendo a la perfeccion" me reiero a lo que escribiste, osea que le capto la idea capichi.

Dijo Homero "Si era tan listo, ¿Por que se murió?"... 
Quizás sepas las cosas que estas haciendo, pero con mis años de experiencia puedo decirte que no es lo mejor. Trate de ayudarte cuando aun no dabas nada de informacion, ahora podría ayudarte por que se lo que realmente quieres lograr, y para eso, deberás utilizar IK mas RootMotion, y con eso va a funcionar genial, animaciones fluidas y de mas, pero igual necesitas un colisionador general, o en su defecto con root motion utilizar un BoxCollider en cada extremidad. https://www.youtube.com/watch?v=JBKMDsc4uxA En ese vídeo podrás ver lo que quiero explicarte. Y el problema puede originarse, por el error en FixedUpdate, osea estas llamándolo desde Update.Lo que necesites estoy... 

Agosto 11, 2015, 04:44:36 PM #9 Ultima modificación: Agosto 11, 2015, 04:47:07 PM por unit3ro

Hola francoe1Hace un par de meses ya habia visto ese video y descargue los proyectos de ejemplo, y la verdad no le veo la diferencia con lo que ofrece mecanim, pero bueno.
Estoy contento con los resultados preliminales, cambie la funcion a FixedUpdate y funciona mucho mejor, tambien consegui un scrip y que modifique a mi necesidad, era para un hovercar, lo he usado en unity v5, en la escena de prueba y con un simple ajustador de la posicion de los pies y funciona de maravilla, el personaje se desplaza suavemente y nunca pierde el contacto con el suelo, salvo que no haya. Hasta ahi todo bien, ahora resta colocarle los capsule colliders en todo el cuerpo para que no traspace las paredes, pero como triggers. cualquier metacodigo es bien recibido.
Mi idea es que cada extremidad independientemente detecte contacto con otros colliders y se aplique una fuerza o movimiento a esa extremidad en direccion contraria al contacto.Gracias por leer.el escript puede que tenga palabras mal escritas, lo reescribi de mi mente porque no lo tenia a mano.
using UnityEngine;
using System.Collections;

public class HoverPelvis : MonoBehaviour {


public float hoverHeight = 0.97f;
public float thusForce = 200;
public float  damping = 20;
public Vector3[] thrusters;
public float castLength = 0.96f;
public float  spheRad = 0.01f;

void Satart () {
   rigidBody = GetComponent<Rigidbody>();
}

void FixedUpdate () {

   RaycastHit hit;

   for (int = 0; i < thrusters.Length; i++) {
      Vector3 wdThuster = transform.TransformPoint(thrusters);
      if (Physics.SphereCast(wdThruster, sphRad, -transform.up, out hit, castLength)) {
         Debug.DrawLine(wdThruster, hit.point, Color.red);
         float discrep = hoverHeight - hit.distance;
         float upVel = rigidBody.GetRelativePointVelocity(wdThruster).y;
         rigidBody.AddForceAtPosition(transform.up * (thrustForce * discrep - upVel * damping), wdThruster);
   } else Debug.DrawRay(wdThruster, -transform.up * castLength, Color.green);
}
}
 

Etiquetas: