Jump to content
Unity Insider Forum

UGUi Panels Sperren


21Be

Recommended Posts

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

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...