Noticias

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

raycast va loco

Iniciado por ramunda, Agosto 01, 2016, 02:05:50 AM

Tema anterior - Siguiente tema
Agosto 01, 2016, 02:05:50 AM Ultima modificación: Agosto 01, 2016, 02:36:49 AM por ramunda
Hola buenas noches, queria preguntarles a ver si tienen alguna idea de porque el Raycast falla en este caso.
 
Bueno tengo un simple sistema de disparo el cual instancia un prefab y da fuerza a el RB etc.
 
Esto va de perlas .
 
El problema es cuando el raycast detecta el objecto al que colisiona en este caso "feria", l hace cuando le da la gana , aveces marca aveces no, al igual que se desvía solo , no siempre va recto y no lo entiendo, lo se por la marca de el agujero de la bala que instancia , si te mueves un poco es como si tardara en reaccionar o no se...alomejor se pega con todo lo que instancia y rebota..puede ser?
 
Lo curioso es que el objeto en si se destruye bien .
 
dejo el script , gracias de antemano.
 
 
 

using UnityEngine;
using System.Collections;
public class disparabolasandroid : MonoBehaviour {
public GameObject CannonBall;
public float shotForce = 1000;
AudioSource audio;
public GameObject explosion;
GameObject cannonBall;
public AudioClip sonidocanon;
private Animation anim;
public GameObject agujero;
public GameObject xispa;
 
void Start()
{
audio = GetComponent < AudioSource> ();
anim = GameObject.Find("pistola").GetComponent<Animation> ();
}
   
public void disparabola()
{
if (Input.GetMouseButtonDown())
explosion.SetActive (true);
cannonBall = GameObject.Instantiate(CannonBall as GameObject);
cannonBall.transform.position = transform.position;
RaycastHit hit;
Ray ray = new Ray (transform.position, transform.forward);
if (Physics.Raycast (ray, out hit,300f))
{
if (hit.transform.gameObject.tag == "feria")
{
puntos.instance.puntuacion = +1;
Debug.Log ("PUNTACO");
}
Instantiate (agujero,hit.point,Quaternion.FromToRotation(Vector3.up,hit.normal));
Instantiate (xispa,hit.point,Quaternion.FromToRotation(Vector3.up,hit.normal));
    }
Rigidbody rBody = cannonBall.GetComponent<Rigidbody> ();
rBody.AddForce (transform.forward * shotForce, ForceMode.Force);
audio.PlayOneShot(sonidocanon, 0.7F);
Instantiate (explosion,transform.position,transform.rotation);
cuentabolas.instance.bolas -= 1;
anim.Play ("fire1");
}

 
 
 
 
 
 
 
 
 
 

Yo le pondría un linerenderer para ver donde apunta exactamente. Luego el tema de la distancia del raycast, a ver si se queda corto?

Cita de: iRobb date=1470076503Yo le pondría un linerenderer para ver donde apunta exactamente. Luego el tema de la distancia del raycast, a ver si se queda corto?
   


iRobb ,grandísima idea lo de el line renderer, ni se me había ocurrido.le habia puesto un Debug.Drawline pero claro solo salia cuando se ejecutaba y no se quedaba fijo...
 
 
 
Estaba más torcido que una cola de mono!! por eso a veces puntuaba doble o no puntuaba según se movía el player.El echo de que estuviera torcido es que lo tengo en un empty delante de la escopeta para instanciar la bala etc. y aunque parecía recto....
 
Así que.
 
Muchas gracias por la idea!! ya esta solucionado !! hacia falta un nivel...jejej en este caso linerenderer!!
 
Saludos y gracias!!
 
 
 
 
 
 
 
 

Etiquetas: