Tagebuch: Black Planet

Nett. Das erinnert mich ein wenig an Populous The Beginning.
Nebenfrage: Was waren das für Geräusche am Anfang? :smiley:

wenn ich das wüsste - hatte eigentlich keine Audioaufnahme vorgesehen :grin:

Himmel-Herr-Gott-Nochmal, finde den Fehler:

    void OnMouseUpAsButton() {
        if (EventSystem.current.IsPointerOverGameObject()) return;
        if (SHOWDEBUG) Debug.Log("Mouse3DHandler -> Clicked()");
        listener?.OnObjectDown(gameObject, null);
    }
    void OnMouseDown()  {
        if (SHOWDEBUG) Debug.Log("Mouse3DHandler -> Down()");
        listener?.OnObjectClicked(gameObject, null);
    }
    void OnMouseUp() {
        if (SHOWDEBUG) Debug.Log("Mouse3DHandler -> Up()");
        listener?.OnObjectUp(gameObject, null);
    }
    void OnMouseEnter() {
        if (SHOWDEBUG) Debug.Log("Mouse3DHandler -> Enter()");
        listener?.OnObjectEnter(gameObject, null);
    }
    void OnMouseExit() {
        if (SHOWDEBUG) Debug.Log("Mouse3DHandler -> Exit()");
        listener?.OnObjectExit(gameObject, null);
    }

Aus meine Klasse die die Mouse-Events für die 3D-Mesh abfängt. Der Fehler sorgt natürlich dafür das man ein UI-Element anklickt und das 3D-Objekt hinter dem UI-Element. Ick will aber nur das UI-Element.

Kann man schon mal ein paar Tage suchen -.-

Hatte so ein ähnliches Problem bei meinem Tower Defender glaub auch gehabt. Ich habs glaub mittels RayCasts gelöst. Damit solltest du ja ganz gut mitbekommen, welches Objekt geklickt wurde. Ist es ein UI-Layer, dann ignoriert das 3D-Objekt die Eingabe

Moin,

das MonoBehavior liefert für die Mouse automatisch die Events: Enter, Down, UpAsButton (Click-Event), Up und Exit. Also eine eigene Klasse die den ganzen Kram abfängt und einen Listener dazu um es weiter zu reichen. Beim Testen wollte ich nur das Click-Event verwenden um die Animation für die Kamera zu starten. Aber beim Klick auf den „Zurück“-Button (war direkt über dem Planeten) kamen dann die Probleme.

Nach einigem Suchen habe ich auch schnell die eigentliche Lösung gefunden:

if (EventSystem.current.IsPointerOverGameObject()) return;

Also die Zeile schnell in OnMouseUpAsButton gebaut um zu testen ob es funktioniert. Leider funktionierte es nicht. Nach einigen Tagen (da ich hier nur ca. 1h Abends was machen kann) habe ich den Fehler gefunden. OnMouseAsButton reiche ich als Down weitere und das Down-Event als Click-Event…

void OnMouseUpAsButton() {
    ...
    listener?.OnObjectDown(gameObject, null);
}
void OnMouseDown()  {
    ...
    listener?.OnObjectClicked(gameObject, null);
}