21Be Geschrieben 22. November 2015 Melden Share Geschrieben 22. November 2015 Hallo zusammnen, nach langer abwesenheit, versuche ich mich in Unity wieder einzuarbeiten. Zur Zeit beschäftige ich mich mit der für mich noch neuen Unity Ugui funktionen. Zur Zeit arbeite ich an einem Ingame Hauptmenu. Das Hauptmenü rufe ich mit ESC auf und will es auch wieder mit ESC schließen da gibt es noch kleine Probleme. Den aufruf beim klicken der verschiedenen Buttens habe ich einfach mit GameObject.setActive gelöst und schalte das zwischen den menüs durch Jetzt zu meinem Anliegen wie schaffe ich es wenn ich in einem Untermenü bin das ich quasi das Main menusperren und erst wieder benutzen kann wenn ich auch im Main menu bin ? DesWeiteren wenn ich auf das/die Ugui klicke wie schaffe ich es das sich der Spieler sich nicht bewegt bzw die raycast/mausclick auf der Map ignoriert werden? Ich hab hier mal ein kleines Video gemacht das man es sich besser vorstellen kann Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
21Be Geschrieben 23. November 2015 Autor Melden Share Geschrieben 23. November 2015 Jemand eine Lösung ? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
malzbie Geschrieben 23. November 2015 Melden Share Geschrieben 23. November 2015 Zur Frage 1 weiss ich nicht so recht, was du meinst... Blende einfach das Hauptmenü weg, dann kannste nicht drauf klicken. Zur Frage 2 kann ich sagen, dass du entweder einen unsichtbaren Collider hinter das Objekt setzen kannst oder aber einfach eine Variable mit einbaust, die dem Spiel sagt, dass das Menü gerade auf ist und deswegen kein Raycast gesendet werden darf. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Nyral Geschrieben 23. November 2015 Melden Share Geschrieben 23. November 2015 Du könntest ein Flag setzen lassen wenn du in einem Untermenü bist. Und das Hauptmenü darf nur aufgerufen werden wenn du "ESC" drückst und das Flag nicht gesetzt ist. So in der Art: public class ToggleMenu : MonoBehaviour { public GameObject gMainMenu = null; public GameObject gSubMenu = null; bool bIsMainMenuOpen = false; // Use this for initialization void Start () { gMainMenu.SetActive(false); gSubMenu.SetActive(false); } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Escape) && !bIsMainMenuOpen) { gMainMenu.SetActive(!gMainMenu.activeSelf); } else if (Input.GetKeyDown(KeyCode.Escape) && bIsMainMenuOpen) { gSubMenu.SetActive(!gSubMenu.activeSelf); gMainMenu.SetActive(!gMainMenu.activeSelf); bIsMainMenuOpen = false; } } public void ToggleMenuState(GameObject _menu) { _menu.SetActive(!_menu.activeSelf); } public void SetSubMenuFlag(bool _state) { bIsMainMenuOpen = _state; } } Wenn du ESC drückst und das Flag nicht gesetzt ist wird das Hauptmenü angeschalten bei nochmaligem drücken wird es wieder deaktiviert. Die Methoden "ToggleMenuState" gibst du zweimal den OnClick Listener des entsprechenden Untermenu Buttons. Als Parameter einfach einmal das Untermenu Gameobjekt und einmal das Haupmenu Gameobject geben. Ausserdem gibst du dem OnClick Listener noch die Methode "SetSubMenuFlag" als Parameter dann den Hacken auswählen. Die Methode "ToggleMenuState" macht nichts anderes als das Gameobjekt das als Parameter übergeben wurde an bzw. auszuschalten. Dazu Toggelt es den bool wert den "gameobjekt.activeSelf" zurückgibt. Und mit der Methode "SetSubMenuFlag" kannst du das Submenu flag setzen. Wenn nun das entsprechende Untermenü angezeigt wird und du nun nochmal "ESC" drückst landest du wieder im Hauptmenü. Dies wird mit dem zweiten if Statment realisiert. Hier wird nichts anders gemacht als nochmal überprüft ob du die "ESC" Taste gedrückt hast und ob das Submenü flag gesetzt wurde. Wenn beides eintrifft dann wird das Untermenu/Hauptmenü wieder ausgeschalten /eingeschalten bzw. der "gameobjekt.activeSelf" wert getoggelt. Sollte nun das Untermenü noch zusätzlich z.B über einen "Back" Button verlassen werden dann brauchst du nichts anderes zu machen als dem OnClick Listener zweimal die Methode "ToggleMenuState" mit den ensprechenden Menüpunkten und die Methode "SetSubMenuFlag" ohne ausgewählten Haken geben. Hoffe du hast es verstaden wie ich es meine. Edit: Habe das ganze noch etwas erweitert damit mehrere Untermenüs gehen und nicht nur eins. Hier das Unitypackage dafür: MainMenu.rar Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
21Be Geschrieben 23. November 2015 Autor Melden Share Geschrieben 23. November 2015 Nyral vielen Dank auch an malzbie werde mich morgen mal dran setzten, ist leider schon zu spät heute Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
21Be Geschrieben 24. November 2015 Autor Melden Share Geschrieben 24. November 2015 Nyral, ich hab es dank deine Hilfe hinbekommen und bin so zufrieden damit danke für dein Beispiel. Zu meiner 2 Frage, mit einem Collider hab ich es probiert leider keinen Erfolg :-( in diversen foren schwebt immer das UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject(); jedenfalls hab ich da noch keine lösung gefunden werde da aber am Ball bleiben Malzbie Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Nyral Geschrieben 24. November 2015 Melden Share Geschrieben 24. November 2015 Du könntest das mit dem Laufen ähnlich wie mit dem Menü lösen. Wenn das Menü geöffnet ist lässt du einen Flag setzen. In deinem Movement Script fragst du dann den Flag ab. Wenn dieser gesetzt ist, dann braucht er den Raycast nicht senden und das laufen beginnen. Ist dieser nicht gesetzt dann wird der Raycast gesendet und der Char bewegt sich. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.