Jump to content
Unity Insider Forum

Munitions Einstellung


Fryzzer

Recommended Posts

Hey

 

Ich soll über ein MenuPanel die Munition Anzahl durch einen Slider ändern so wie ich es derzeit mache funktioniert es leider nicht so richtig.

bin recht neu in Unity weshalb ich da noch nicht so richtig klar komme. 

Das Panel ist in einer Extra Szene 

 

Derzeitiger Code: 

public class Global : MonoBehaviour {

    static public int ammo = 5;
	static public int obstacleCount;
    public void setAmmo(int ammoUpdate)
    {
        ammo = ammoUpdate;
    } 
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin moin!

vor 2 Stunden schrieb Fryzzer:

funktioniert es leider nicht so richtig.

Das ist leider keine ausreichende Fehlerbeschreibung. Was passiert denn/passiert nicht? Der Code sieht soweit nämlich erstmal in Ordnung aus.

Hast du dem Slider denn auch eine Instanz dieses Scripts in die Hand geedrückt und "setAmmo(float)" eingestellt?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 24 Minuten schrieb Sascha:

Moin moin!

Das ist leider keine ausreichende Fehlerbeschreibung. Was passiert denn/passiert nicht? Der Code sieht soweit nämlich erstmal in Ordnung aus.

Hast du dem Slider denn auch eine Instanz dieses Scripts in die Hand geedrückt und "setAmmo(float)" eingestellt?

Habe das Script und co dem Slider zugewiesen.

 

Wenn ich dann auf Play drücke und in die Game Szene wechsel ist die Munition halt trotzdem 5 und nicht die die im Slider Value drin steht.

zum Thema setAmmo(float) wo soll ich dat den machen? 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Slider hat keine Möglichkeit zu wissen, dass er deine setAmmo-Methode aufrufen soll. Woher denn auch? ;)

grafik.pngEs ist also deine Aufgabe, das einzustellen. Es gibt da zwei Wege. Der einfachere ist erstmal, dass du es im Editor einstellst. Dafür gehst du zu der Box im Inspektor des Sliders, auf der im Titel "OnValue Changed (Single)" steht. Hierbei handelt es sich um ein "UnityEvent". Die meisten UI-Elemente haben so eins, und du kannst auch selber welche erstellen. Jedenfalls kann ein UnityEvent von der Komponente (also hier: dem Slider) ausgelöst werden. Der Slider löst dieses Event aus, wenn sich dessen Wert ändert. In der Box hast du jetzt eine Liste, in die du Reaktionen auf das Event eintragen kannst. Oder anders gesagt: Wenn sich der Wert des Sliders ändert, werden alle Sachen gemacht, die in der Liste stehen. Wenn du also deine "setAmmo"-Methode auf die Liste packst, dann wird sie aufgerufen.

Dafür drückst du auf das Plus unten rechts. Der neue Eintrag in der Liste ist in vier Teile auftgeteilt. Den ersten "Runtime Only" lässt du so. Der zweite Teil darunter ist ein Feld, in das du das Ziel-Objekt reinziehen kannst. So kannst du ein beliebiges Objekt in deiner Szene oder den Assets auf das Event reagieren lassen. In diesem Fall ist die Komponente ja aber auf dem Slider selbst, also ziehst du den Slider da rein. Der dritte Teil ist ein Dropdown-Menü (wo "No Function" steht). Das öffnest du, klickst auf deine Komponente ("Global") und dann auf die Methode "setAmmo(float)"... aber halt, das geht gar nicht! Ein Slider hat immer einen float-Wert (auch "Single" genannt, deshalb steht das da in Klammern). Und ein UnityEvent kann nur exakt die Art von Wert übergeben, die reinkommt. Du musst also dein Script ändern:

public class Global : MonoBehaviour {

    static public int ammo = 5;

    public void SetAmmo(int ammoUpdate)
    {
        ammo = ammoUpdate;
    }

    public void SetAmmo(float ammoUpdate)
    {
        SetAmmo((int)ammoUpdate); // <- rundet ab
    }
}

(Hab SetAmmo mal großgeschrieben, macht man in C# so.)

Jetzt taucht SetAmmo gleich drei (!) Mal in deiner Liste im UnityEvent auf:

grafik.png

Da haben wir jeweils SetAmmo(int) und SetAmmo(float). Wenn du davon einen auswählst, wird der vierte Teil des Listeneintrags sichtbar: Ein Feld, in das du den Wert eingeben kannst. So kannst du deinen Ammo-Wert immer auf z.B. 20 setzen, wenn der Slider bewegt wird. Gut zu wissen, ergibt hier aber keinen Sinn. Du willst natürlich den Wert des Sliders übergeben, und dafür ist der Eintrag unter "Dynamic float" da.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...