Creare Videogiochi - Game Developer

Versione completa: Controllare che avvenga una collisione in C#
Al momento stai visualizzando i contenuti in una versione ridotta. Visualizza la versione completa e formattata.
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
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.
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??
non devi richiamarlo, e` un overload e` chiamato da solo nell`update interno dell`engine
quindi il codice dovrà essere così?
Codice:
void Update {
//codice
}
void OncollisionEnter(Collision collision)
{
//codice
}

grazie mille!! Big Grin
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!!
HAi un collider o un rigidbody nel tuo gameobject ?
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...
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
prima di mettere il debug ho provato a distruggere l'oggetto con Destroy(gameObject) e non funzionava nemmeno, quindi il problema non è nel debug...
attenzione che il metodo detroy lo devi usare cosi`
Codice:
Destroy(transform.gameobject)
continua a non funzionare!!