Noticias

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

Colisiones de balas sin motivo

Iniciado por ramunda, Junio 19, 2015, 01:42:59 AM

Tema anterior - Siguiente tema
Hola muy buenas , una pregunta , a alguien le ha pasado que segun trozos de mapa/terrain es como si hubiese una pared invisible que te hace colisionar las  balas sin haber nada alli? , me esta volviendo loco este tema y no entiendo por que, he mirado todo lo posible con el terrain he bajado la velocidad de las balas ...en fin todo lo que se me ha ocurrido pues aun asi hay trozos de el mapa que la metralleta va a todo gas y las balas chocan a un almo de el arma sin haber nada alli....supongo que sera un bug de unity ...pero lo peor es que he creado un nivel 2 y es por todo ese level que pasa lo mismo en el otro es a trozos.
 
Alguna idea?
 
Salvo proyecto y reinstalo unity??
 
Gracias
 

Veo que has seguido adelante con tru trabajo!
Felicidades,
puede ser que sea el collider?
es dificils aberlo sin mas informacion tal vez pasa un video?
Un saludo!

Visita http://www.programacionwh.com encontraras tutoriales y muchas cosas .


Tambien puedes visitar mi canal de YouTube https://www.youtube.com/channel/UClSCTn0wPN1iFjED0yaoJUA



Tiene pinta de que las balas están chocando entre ellas, o deshabilitas las colisiones entre balas o modificas tu script para que no exploten las balas si chocan con otras balas.

En el evento de colisión ponle un debug.log que muestre el nombre del objeto con que colisiona, eso te debiera aclarar que sucede.
 
También debes revisar las Physic settings del proyecto y asignar layers a los distintos objetos: por ejemplo, un layer llamado "Municion" sólo debiera colisionar con los layers "Terreno" y "Enemigo", así las balas no chocan entre sí ni con el jugador que debiera tener su propio layer "Jugador".

Cita de: ProgramacionWH date=1434673213Veo que has seguido adelante con tru trabajo!
Felicidades,
puede ser que sea el collider?
es dificils aberlo sin mas informacion tal vez pasa un video?
Un saludo!
Gracias ProgramacionWH, si decidi meterle cuernos a la cosa y sigo adelante , mirare si puedo grabar un video o algun screeen y las colgare.

Cita de: AVSoftware date=1434674669Tiene pinta de que las balas están chocando entre ellas, o deshabilitas las colisiones entre balas o modificas tu script para que no exploten las balas si chocan con otras balas.
 
AVSoftware gracies por contestar, no se exactemente como hacer lo que me dices , pongo el script de disparo aver si vees algo raro por aqui y me puedes dar una luz:

var Bala : Rigidbody;
var Velocidad = 100;
static var municion : int = 100;
var municiontotal = 1000;
var guimuni : GUIText;
public var guitotal : GUIText;
var destello : GameObject;
var manoanim : GameObject;
var municionanim : GameObject;
var gunShot : AudioClip;
var recarga : AudioClip;
var vacio: AudioClip;
//var recarga : AudioClip;
//var gunShot : AudioSource;
//public  var Sonidodisparo : AudioClip;  
//public  var Sonidorecarga : AudioClip ;
//public  var Sonidovacio : AudioClip ;  
 
function Start(){
destello.active = false;
}
function Update(){
guimuni.text = "Municion: " + municion.ToString();
guitotal.text = "Municion Total: " + municiontotal.ToString();
 
if(Input.GetButton("Fire1")){
    if (municion > 0 && municiontotal >= 0){
    AudioSource.PlayClipAtPoint(gunShot, transform.position, 1);
     
        var clona = Instantiate(Bala, transform.position, transform.rotation);
   clona.velocity = transform.TransformDirection(Vector3(0, 0, Velocidad));
         municion -= 1;
         Destroy (clona.gameObject, 2);
         
}
}
if(Input.GetKeyDown("r") && municiontotal > 0){
   
    municion = 0;
    AudioSource.PlayClipAtPoint(recarga, transform.position, 1);
    Invoke ("recargando",2);
    
}
if(Input.GetMouseButtonDown(0)){
destello.active = true;
}
else
if(Input.GetMouseButtonUp(0)){
destello.active = false;
}   
if (municion <= 0){
if(Input.GetButton("Fire1")){
AudioSource.PlayClipAtPoint(vacio, transform.position, 1);}
destello.active = false;

}
}
function recargando (){
if(municiontotal > 0){
   
municiontotal -= 100;
municion +=100;
}
if (municion >100){
municion = 100;
}
}

Cita de: Kondor0 date=1434684371En el evento de colisión ponle un debug.log que muestre el nombre del objeto con que colisiona, eso te debiera aclarar que sucede.
 
También debes revisar las Physic settings del proyecto y asignar layers a los distintos objetos: por ejemplo, un layer llamado "Municion" sólo debiera colisionar con los layers "Terreno" y "Enemigo", así las balas no chocan entre sí ni con el jugador que debiera tener su propio layer "Jugador".
 
Gracias por contestar Kondor0 lo que me dices me parece muy acertado y me gustaria probarlo, pero soy demasiado lerdo en esto para saber meter un log... lo de los layers si lo probare y el Phusic settings donde lo encuentro, gracias de antemano.

Debug.Log es sólo una línea, no es ninguna ciencia: http://docs.unity3d.com/ScriptReference/Debug.Log.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Debug.Log.html
 
Las Physic Settings a menos que las hayan cambiado de lugar debieran estar en Edit -> Project Settings -> Physics.
 
Leete el manual de Unity, todos estos conceptos son explicados ahí.

Junio 22, 2015, 08:25:25 AM #8 Ultima modificación: Junio 22, 2015, 08:30:35 AM por ramunda
Cita de: Kondor0 date=1434952480Debug.Log es sólo una línea, no es ninguna ciencia: http://docs.unity3d.com/ScriptReference/Debug.Log.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Debug.Log.html
 
Las Physic Settings a menos que las hayan cambiado de lugar debieran estar en Edit -> Project Settings -> Physics.
 
Leete el manual de Unity, todos estos conceptos son explicados ahí.
Gracias de nuevo Kondor0, me pongo a ello y te digo si funciono para futuras referencias,tambien intentare lo de log , gracias de nuevo.
 
Aaa y tengo video para que se vea mejor
 
https://drive.google.com/file/d/0B10zO1NOrZQRUkpEVWNUd1R0dXc/view?usp=sharing" rel="external nofollow">https://drive.google.com/file/d/0B10zO1NOrZQRUkpEVWNUd1R0dXc/view?usp=sharing
 
Primer fragmento de video las balas salen a ritmos diferentes, lentas, rapidas o muy rapidas.... , segundo fragmento cuando paso de nivel no llegan ni a un palmo delante mia y chocan....

Si estás ocupando proyectiles debieras asignarle un impulso, también asegúrate de que sus rigidbodies no sean afectados por la gravedad.
 
En mi juego, a los proyectiles les asigno su velocidad inicial así (dirección es un vector, fuerzaImpulso es un float):

proyectil.rigidbody.AddForce(direccion * fuerzaImpulso, ForceMode.Impulse);

En todo caso, para las balas de un arma por lo general se usan sólo raycast con tal de que sea más eficiente.
 
Ya si prefieres seguir con proyectiles entonces recuerda que debes destruirlos después de algunos segundos, también más adelante deberás implementar un sistema de pooling ya que instanciar y destruir objetos es caro en recursos.
 
En fin, si todo esto es muy complicado para tí (que lo es, no nos engañemos) entonces mejor pospón tu FPS y trata de aprender con algo más simple. Yo sé mucho más que tú y aún así no me pondría a hacer un FPS.

Etiquetas: