Creare Videogiochi - Game Developer
Controllare che avvenga una collisione in C# - Versione stampabile

+- Creare Videogiochi - Game Developer (https://www.making-videogames.net/giochi)
+-- Forum: Unity3D Italia (https://www.making-videogames.net/giochi/Forum-Unity3D-Italia)
+--- Forum: Richieste di Aiuto per Unity 3D (https://www.making-videogames.net/giochi/Forum-Richieste-di-Aiuto-per-Unity-3D)
+--- Discussione: Controllare che avvenga una collisione in C# (/thread-Controllare-che-avvenga-una-collisione-in-C)



Controllare che avvenga una collisione in C# - Johnny 97 - 28-07-2012

Ehmmmmm, ok è da stamattina che cerco, che provo, faccio debug, ma ancora niente...
Mi serve controllare che il giocatore collida con un oggetto, nela documentazione ufficiale ho trovato OnTriggerEnter e OnCollisionEnter ma non c'ho capito niente xD
Non è che qualcuno può spiegarmi che funzione devo usare o che comando devo scrivere dentro l'if?? xD


RE: Controllare che avvenga una collisione in C# - simone - 28-07-2012

devi aggiungere un overload del metodo OnCollisionEnter nel tuo script , in questo modo:
Codice:
void OncollisionEnter(Collision collision)
{
       Debug.Log("Avvenuta collisione con un oggetto !");
}

se invece vuoi controllare la collisione solo con un oggetto specifico puoi farlo tramite un check del tag, o del nome:
basta inserire sempre nel metodo OnCollisionEnter :
per il nome
Codice:
if (collision.gameobject.name == "nome dell oggetto specifico")
{
Debug.Log("collisione rilevata con l`oggetto");
}
per il tag :
Codice:
if (collision.gameobject.tag ==  "tag del tuo oggetto")
{
Debug.Log("collisione rilevata con l`oggetto");
}

poi dipende tutto da come hai impostato il progetto, per esempio io suddivido gli oggetti in tag e certi check (come questo) lo faccio tramite tag.

spero di essere stato utile, ciao.


RE: Controllare che avvenga una collisione in C# - Johnny 97 - 28-07-2012

grazie mille, avevo provato a fare con i tag, il problema è che l'inizio del mio script è sviluppato nella funzione Update, e quando scrivo "OnCollisionEnter();" per saltare alla funzione OnCollisionEnter mi dà errore... Come risolvo questo??


RE: Controllare che avvenga una collisione in C# - simone - 28-07-2012

non devi richiamarlo, e` un overload e` chiamato da solo nell`update interno dell`engine


RE: Controllare che avvenga una collisione in C# - Johnny 97 - 29-07-2012

quindi il codice dovrà essere così?
Codice:
void Update {
//codice
}
void OncollisionEnter(Collision collision)
{
//codice
}

grazie mille!! Big Grin


RE: Controllare che avvenga una collisione in C# - Johnny 97 - 30-07-2012

up!
O sono io cretino, o è il mio Unity ._.
Non rileva alcuna collisione, nel debug non esce niente quando collido con l'oggetto... Ecco il codice:

Codice:
using UnityEngine;
using System.Collections;

public class Cassa : MonoBehaviour {
    public float coordy;
    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
    coordy = GameObject.FindWithTag("Player").transform.position.y;
        if (coordy > 1.72)
            if (coordy < 1.78)
        {
            Debug.Log ("FineUpdate");
        }
    }
    void OnCollisionEnter (Collision collision) {
        if (collision.gameObject.tag == "Player")
            Debug.Log ("Fine OnCollisionEnter");
    }
}

Oh, e mi servirebbe sapere anche come utilizzare WaitForSecond!!


RE: Controllare che avvenga una collisione in C# - simone - 30-07-2012

HAi un collider o un rigidbody nel tuo gameobject ?


RE: Controllare che avvenga una collisione in C# - Johnny 97 - 30-07-2012

nell'oggetto in cui metto lo script ho un collider, nell'altro no... l'altro oggetto è il First Person Controller che c'è di default su unity...


RE: Controllare che avvenga una collisione in C# - simone - 30-07-2012

che quindi ha un character controller giusto ?? (che e` un collider)
al posto di un Debug.Log prova a cambiare colore del materiale dopo la collisione, se non sbaglio la console stampa un solo certo numero di funzioni per ciclo, forse il problema e` quello


RE: Controllare che avvenga una collisione in C# - Johnny 97 - 30-07-2012

prima di mettere il debug ho provato a distruggere l'oggetto con Destroy(gameObject) e non funzionava nemmeno, quindi il problema non è nel debug...


RE: Controllare che avvenga una collisione in C# - simone - 30-07-2012

attenzione che il metodo detroy lo devi usare cosi`
Codice:
Destroy(transform.gameobject)



RE: Controllare che avvenga una collisione in C# - Johnny 97 - 30-07-2012

continua a non funzionare!!