Noticias

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

[AYUDA] Ayuda para programación en C#

Iniciado por mariumedina96, Octubre 27, 2017, 12:45:44 AM

Tema anterior - Siguiente tema
Octubre 27, 2017, 12:45:44 AM Ultima modificación: Octubre 27, 2017, 12:49:33 AM por mariumedina96
Buenas estoy intentando programar un juego en el que al pasar por un determinado sitio, caiga una bola en plan tipo Indiana Jones, por un desfiladero en pendiente. Pues aquí ando liado porque estoy probando códigos y no consigo que me salga bien. Algún alma caritativa que entienda de C# me podría ayudar? :S
 
 
 
He puesto un collider transparente por el cual pase y caiga la bola, pero solo se hacer que caiga dandole a un botón del teclado y quiero que caiga solo con que colisione con el collider o pase por encima.

Octubre 27, 2017, 01:01:04 AM #1 Ultima modificación: Octubre 27, 2017, 01:02:43 AM por OldGuy

void OnCollisionEnter(Collision col)
{
if(col.gameObject.tag == "TagCollider")
{
   // Cae la roca
}
}

 
Está hecho de memoria, pero más o menos es eso. Necesitar que el player tenga un rigidbody.
 
Hay muchas formas de hacerlo, otro modo sería con Raycast, de esta forma no necesitas rigidbody.
 
También con OnTriggerEnter, es muy parecido, solo que recibes un Collider en vez de un Collision, y el collider tiene que ser Trigger. En la documentación puedes encontrar más info.

Cita de: OldGuy date=1509058864

void OnCollisionEnter(Collision col)
{
if(col.gameObject.tag == "TagCollider")
{
   // Cae la roca
}
}

   
      Está hecho de memoria, pero más o menos es eso. Necesitar que el player tenga un rigidbody.
   
   
      Hay muchas formas de hacerlo, otro modo sería con Raycast, de esta forma no necesitas rigidbody.
   
   
      También con OnTriggerEnter, es muy parecido, solo que recibes un Collider en vez de un Collision. En la documentación puedes encontrar más info.
   


Actualmente tengo esto:
 
public class DetectPlayer : MonoBehaviour {

    void awake () {
 
        Collider myCollider;

        myCollider = GetComponent<Collider> ();

        myCollider.isTrigger = true;

    }
 


    void OnTriggerEnter (Collider other)

    {

        Debug.Log("Cae la bola");

    }
 


}

 
 
 
 
Pero quiero que en vez de que aparezca el mensaje de Cae la bola, me ejecute este otro script que es el que hace que aparezca la bola:
 
public class PlayerSpawner : MonoBehaviour {
 
    public GameObject playerPrefab;

    void Update () {
 
        if (Input.GetKey(KeyCode.Space))

        {

            Instantiate (playerPrefab, transform.position, transform.rotation);
 
            Destroy(playerPrefab);

        }
 
    }

}

Lo mismo que tienes en PlayerSpawner puedes ponerlo en el mismo script donde ejecutas el Ontriggerenter:
 

public GameObject playerPrefab;
 
void OnTriggerEnter (Collider other)
{
Debug.Log("Cae la bola");
     Instantiate (playerPrefab, transform.position, transform.rotation);
    Destroy(playerPrefab);
}

 
o acceder al otro script, lo puedes hacer mediante una variable pública, buscarlo o con SendMessage. Ejemplo de buscarlo:
 

// Si el script está en el mismo objeto:
GetComponent<PlayerSpawner>().NombreDeFuncion();
// O buscar el objeto:
GameObject.Find("NombreObjeto").GetComponent<PlayerSpawner>().NombreDeFuncion();

 
 

Gracias me funciona bien metiendolo dentro del mismo Script, pero ahora me surge otra duda, si quiero por ejemplo coger unas monedas dentro del juego y pongamos que al coger 4 o 5 monedas aparezca la bola, tendría que meterle un if no?

Octubre 27, 2017, 10:49:09 AM #5 Ultima modificación: Octubre 27, 2017, 10:49:57 AM por OldGuy
Sí, puedes comprobar cada vez que pases por el collider con un IF si has llegado al limite de monedas que deseas.
 
Un par de consejos, este es el foro de presentaciones, aquí tu duda será más difícil de ser encontrada y respondida. Y el título tampoco ayuda, es muy abierto, ayuda de programación pueden ser mil cosas, es mejor enfocarlo al problema, como por ejemplo, "Problema con los colliders", de está forma enfatizas mucho más, y es más fácil que alguien que sepa del tema te pueda ayudar.

Etiquetas: