Blubbi Geschrieben 18. Januar 2019 Melden Share Geschrieben 18. Januar 2019 (bearbeitet) 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. bearbeitet 19. Januar 2019 von Blubbi Alte Problem gelöst neues Vorhanden Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Felix K. Geschrieben 21. Januar 2019 Melden Share Geschrieben 21. Januar 2019 (bearbeitet) 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 21. Januar 2019 von Felix K. Schriftfarbe lies sich nicht anpassen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.