Jump to content
Unity Insider Forum

Schalter und Array GameObject für Sperren


Blubbi

Recommended Posts

Guten Abend zusammen,

ich bin gerade dabei ein Schalter Rätsel zu erstellen. Am Anfang hatte ich das Problem das wenn ich den Schalter gedrückt habe meine Rote und Blaue Wegsperre sich nicht geändert hatten(Rot wird frei und Blau wird gesperrt. Beim nochmaligen Aktiviren des Schalters soll Rot gesperrt werden und Blau soll frei werden). Nach dem ich zwei neue GameObject Variablen erstellt hatte und im Inspector sie dann zugewiesen hatte funktionierte es. Wenn ich weitere Wegsperren eingefügt hatte in der Scene wurden die Ignoriert. Klar hatten keine Verknüpfung zum Schalter. Jetzt würde ich das Script erweitern. das ich weitere Sperren einfügen kann. Option 1 wäre das ich so viele GameObject Variablen erstelle so viele Sperren ich habe. aber ich müsste dann in den Script genau so viele verknüpfungen erstellen was natürlich unflexibel wäre. Habe mir dann Option 2 Überlegt das ich ein GameObject Array erstelle das ich für jede Scene wo ich mit den Sperren arbeite unterschiedliche anzahlen von Sperren nutzen kann.

Sobald ich aber das Array erstelle mault mein Visual Studio das er mit den Befehl rotebox.GetComponent<rswitch>.switchred(); nichts anfangen kann bzw. blauebox.GetComponent<bswitch>.switchblue();

bswitch und rswitch sind zwei Script die bei den jeweiligen Sperren eine Animation abspielen wie die Sperre ein oder ausfährt und dementsprechend den Box Collider 2d aktiviert oder deaktiviert.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RBSwitch : MonoBehaviour
{

    private Animator anim;
    public GameObject[] rotebox;
    public GameObject[] blauebox;



    // Start is called before the first frame update
    void Start()
    {
        //rotebox = GameObject.Find("/Rot/R_Box");
        //blauebox = GameObject.Find("/B_Box");
        //rotebox = GameObject.FindGameObjectsWithTag("switch_r");
        //blauebox = GameObject.FindGameObjectsWithTag("switch_b");
        anim = GetComponent<Animator>();

    }
    // Update is called once per frame
    void Update()
    {

    }

    public void Smash()
    {

        if (anim.GetBool("rbonoff") == true)
        {

            anim.SetBool("rbonoff", false);
            rotebox.GetComponent<rswitch>().switchred();
            blauebox.GetComponent<bswitch>().switchblue();
        }
        else
        {
            anim.SetBool("rbonoff", true);
            blauebox.GetComponent<bswitch>().switchblue();
            rotebox.GetComponent<rswitch>().switchred();

        }


    }
}

 wo habe ich da meine Fehler drin bzw. habe ich denn falschen Ansatz für mein Rätsel?

Hier unten habe ich noch ein Screen von einen alten Spiel vom Super Nintendo das man sich in etwas vorstellen kann was ich meine.

 

alttp_gr_295.jpg

bearbeitet von Blubbi
Alte Problem gelöst neues Vorhanden
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi. Deine beiden Variablen "rotebox" und "blauebox" sind Arrays. Wenn Du "blauebox.GetComponent<bsswitch>()…." aufrufen willst, musst Du noch die Position im Array angeben. Also "blauebox[x].GetComponent …. . x ist dabei die Position im Array.

bearbeitet von Felix K.
Schriftfarbe lies sich nicht anpassen.
Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...