C# / Unity Methode einer anderen Klasse aufrufen?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Button : MonoBehaviour
{
public GameObject back;
private void Start()
{
back = GameObject.Find("Background");
}
void OnMouseOver()
{
if (Input.GetMouseButtonUp(0))
{
back. <- Methode der Klasse aufrufen
}
}
}
Ich habe die Klasse Background gefunden und möchte nun in der Methode "void OnMouseOver()" die Funktion der Background Klasse aufrufen. Wieso kann ich diese nicht wie folgt aufrufen...?
back.MethodeDerBackgroundKlasse();
1 Antwort
Weil die Variable back nicht vom Typ Background ist, sondern vom Typ GameObject. Und dieser kennt die Methoden des Typs Background nicht. Du musst b deklarieren als
private Background back;
(public macht nur dann Sinn, wenn die Variable auch von anderen Klassen verwendet werden soll)
und dann einen Cast machen
back = (Background)GameObject.Find("Background");
Der Typ "UnityEngine.GameObject" kann nicht in "Background" konvertiert werden.
Dafür kenne ich nun Unity zu wenig, aber Fakt ist, dass Du aus C# Sicht ein Objekt vom Typ A hast und versuchst, Methoden von Typ B aufzurufen. Das geht halt nicht. Du musst jetzt halt irgendwie aus dem allgemeinen GameObject in ein Background-Objekt konvertieren.
Versuche mal
GameObject go = GameObject.Find("Background");
back = (Background)go.GetComponent(typeof(Background));
so unterkringelt er mir aber "back = (Background)GameObject.Find("Background");"