Unity / C# Wieso ist Sprite Variable gleich "null"?
Hi, kurze Frage zu folgendem Code
Dies ist meine Background Klasse:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Background : MonoBehaviour
{
public Sprite maBackground;
public Sprite naBackground;
public Sprite currentBackground;
void Update()
{
this.GetComponent<SpriteRenderer>().sprite = GetBack();
}
public Sprite GetBackground()
{
return currentBackground;
}
public void SetBackground(Sprite back)
{
this.currentBackground = back;
}
Das ist meine ChangeBackground Klasse:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class changeback : MonoBehaviour
{
Background back = new Background();
private void Update()
{
OnMouseOver();
}
void OnMouseOver()
{
if (Input.GetMouseButtonUp(0))
{
back.SetBackground(back.naBackground);
}
}
}
Wieso wird die "currentBackground" Sprite-Variable nicht auf naBackground gesetzt?
Wenn ich in meiner Background Klasse in der Update Methode "Debug.Log(back)" eingebe, kommt immer nur "null" raus, wieso?
Freu mich über jede Hilfe.
Danke
2 Antworten
Background.naBackground
wird nirgends initialisiert. Es gibt auch keine Methode, die das Feld initialisieren oder aktualisieren könnte.
Wenn du sie auf einen statischen Wert setzen möchtest, kannst du sie bereits bei der Definition mit einem Wert deiner Wahl initialisieren:
public Sprite naBackground = ...; // hier initialisieren
Ich hab naBackground und maBackground in Unity eine Textur übergeben.
void Update()
{
this.gameObject.GetComponent<SpriteRenderer>().sprite = naBackground;
}
wenn ich meiner Update Methode so ändere, gibt es auch die gewünschte Textur aus, sie lässt sich nur nicht ändern.
OnMouseOver() sollte nicht in Update ausgeführt werden, da diese so oder läuft.
https://docs.unity3d.com/ScriptReference/MonoBehaviour.OnMouseOver.html
Dein Objekt benötigt zu dem ein Trigger Collider. Siehe Link. Da steht alles drin.
Debugge die funktion. Wird OnMouseOver ohne Update ausgeführt, wenn du mit der Maus über das Objekt gehst?
Ist das Script auf dem Objekt?
Ist ein Collider auf dem Objekt?
Wenn ich mit der Maus über dem Objekt bin wird es nicht ausgeführt.
Das Script ist auf dem Objekt.
Was ist ein Collider? :)
OK, Collider ist jetzt auch vorhanden. Jetzt geht es ohne
Wenn ich OnMouseOver() nicht in Update drin habe funktioniert es leider nicht. Wieso? Weis ich auch nicht. :/