L'objet contient le composant de script.Unity3D: Incompatibilité des variables de script avec OnTriggerEnter2D
public class TeleportReference : MonoBehaviour {
private GameObject reference;
void Start() {
reference = null;
}
public void SetReference(GameObject other){
reference = other;
}
public GameObject GetReference(){
return reference;
}
Maintenant, si je recherche d'un objet et tester les variables de script
GameObject test = GameObject.FindGameObjectWithTag("Water");
print(test);
print(test.GetComponent<TeleportReference>());
print(test.GetComponent<TeleportReference>().GetReference());
cela fonctionne très bien et getReference() renvoient la variable I emmagasinés.
Mais maintenant, si je l'utilise whithin OnTriggerEnter2D
private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Water")
{
print(other);
print(other.gameObject);
print(other.GetComponent<TeleportReference>());
print(other.GetComponent<TeleportReference>().GetReference());
}
}
getReference() return null (ou une autre variable que je dû au démarrage() de la classe TeleportReference). Toutes les autres sorties de test restent les mêmes.
Est-ce que quelqu'un pourrait donner un indice pourquoi cela pourrait arriver? Cela signifie-t-il que GetComponent a créé une nouvelle instance de TeleportReference dans le second cas?
Où est votre code OnTriggerEnter2D? il est attaché à l'objet avec l'étiquette "Eau"? c'est attaché à un objet différent de "Water"? –
Lorsque des collisionneurs entrent l'un dans l'autre (et s'ils sont tous les deux déclencheurs), on appelle OnPiggerEnter2D sur chacun d'entre eux. Je vous suggère 'Debug.Log (other.gameObject.name);' pour s'assurer que seuls les objets voulus ont ce code appelé. J'espère que ça aide! – andeart