Jump to content
UnitySpain
TabacoHabano

ANSWERED [RESUELTO] Problema con Trail Renderer: marcas derrape coche

Recommended Posts

¡Hola a todos!
Tengo un problemilla a ver si alguien me hecha un cable:
Estoy intentando hacer unas marcas de derrape para un coche.

Para ello utilizo un trail renderer. Todo bien me lo dibuja en el suelo.
El problema es que también me lo dibuja también en el aire cuando el coche da un salto.

image.png

image.png

Para cada marca de derrape tengo un objeto vacío pegado a la rueda con un collider, que me sirve para detectar con el código C# si el collider entra o sale del contacto con el collider del suelo (tag "suelo".

- Cuando se activa el trigger collider suelo, el objeto con el trail renderer cambia a la capa 0 (para que lo vea y muestre la cámara).

- Cuando sale del collider suelo, el objeto con el trail renderer cambia a la capa 8 (que he creado para que no lo vea ni muestre la cámara).

Entonces:

Cuando el coche sale del colider del suelo de una rampa, cae de un puente por ejemplo, el trail renderer desaparece mientras el coche se mantiene y cae en el aire.

Pero en cuanto toca el suelo, aparece todo el trail renderer y a mi me gustaría que sólo estuviese dibujado en el suelo. (no sé cómo hacer esto)

He intentado hacer que solo se dibuje al entrar en un collider, cambiando la capa visible por la cámara.
pero cuando llega al collider del suelo, se activa la capa visible para el trail renderer, pero me aparecen todo los rastros por detrás en el aire como en la imagen.
¿Alguna idea de cómo solucionar esto? Gracias

Edited by TabacoHabano
resuelto

Share this post


Link to post
Share on other sites

Buenas.

Con GetGroundHit puedes detectar si el WheelCollider esta tocando suelo o no. Usalo para hacer aparecer el trail cuando las ruedas tocan suelo. En caso de que no toque suelo, desactiva el trail

Saludos 

Share this post


Link to post
Share on other sites
3 hours ago, Mantis said:

Buenas.

Con GetGroundHit puedes detectar si el WheelCollider esta tocando suelo o no. Usalo para hacer aparecer el trail cuando las ruedas tocan suelo. En caso de que no toque suelo, desactiva el trail

Saludos 

Buenas!

gracias por responder.
El problema del GetGroundHit  es que me instanciará el trail renderer siempre que toque cualquier superficie. Y yo quiero que los instancie solamente, digamos con un tipo de superficie.
Por eso tengo un tag para las "carreteras" y otro tag para el "barro".

Yo quiero que se instancie el trail sólo cuando esté tocando una superficie con tag "barro".

Agradezco tu aporte, pero no soy programador y no sé cómo implementar el getgroundhit con los tags de la superficie.

Un saludo!

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DetectorDerrapes : MonoBehaviour {

    public GameObject marcaDeRuedas; //para el prefab con trail renderer
    private GameObject derrape; // el objeto que se instanciará.
    public GameObject EstaRueda; //el objeto que sirve como referencia de posición de la rueda.

    private void OnTriggerEnter(Collider other)
        {
            if (other.tag == "Tierra")
            {
                InstanciarDerrape();
            }
            else return;
        }

        private void OnTriggerExit(Collider other)
        {
            if (other.tag == "Tierra") //other.tag == "Tierra" //other.gameObject.tag.Contains("Tierra")
            {
                DestruirDerrape();
            }
            else return;

        }

    void InstanciarDerrape()
    {

        derrape = Instantiate(marcaDeRuedas, transform);
        derrape.transform.SetParent(EstaRueda.transform);
        Debug.Log("Derrapando");
    }
    void DestruirDerrape()
    {
        Destroy(derrape);

    }

}

Este es mi código ahora, con el que he conseguido que se instancie el trail. Sin embargo, por algún motivo que desconozco, también genera uno o más clones del objeto instanciado y solo borra 1 cada vez que sale del collider.

Share this post


Link to post
Share on other sites

Al final lo he resuelto con la ayuda de un amigo. Dejo el código por si a alguien se le ocurre cómo hacerlo mejor, mejorar su rendimiento o por si a alguien le sirve:

(Acepto sugerencias)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DetectorDerrapes : MonoBehaviour {

    public GameObject prefabDerrape; //para el prefab con trail renderer
    private GameObject derrape; // el objeto que se instanciará.
    public GameObject EstaRueda; //el objeto que sirve como referencia de posición de la rueda.

    //NUEVO
    private bool estaderapando = false;

    private void OnTriggerEnter(Collider other)
    {
        if (other.tag == "Tierra" && !estaderapando)
        {
            estaderapando = true;
            InstanciarDerrape();
            Debug.Log("Derrapando");

        }
        else return;

    }

    private void OnTriggerExit(Collider other)
    {
        if (other.tag == "Tierra") //other.tag == "Tierra" //other.gameObject.tag.Contains("Tierra")
        {
            DestruirDerrape();
            Debug.Log("no derrape");

        }
        else return;

    }
    
    void InstanciarDerrape()
    {

        derrape = Instantiate(prefabDerrape, transform);
        derrape.transform.SetParent(EstaRueda.transform);
    }
    void DestruirDerrape()
    {
        Destroy(derrape);
        estaderapando = false;

    }
}

 

Share this post


Link to post
Share on other sites

×
×
  • Create New...