#c# #unity3d #events #menu #pause
Вопрос:
Я пытаюсь создать меню паузы в unity VR, которое я хочу, когда я нажимаю кнопку на контроллере, появляется меню, но я не знаю, как сделать так, чтобы меню появлялось при нажатии кнопки, изображение того, что у меня есть, о событии, но я, скорее всего, тоже сделал это неправильно
Комментарии:
1.
when I press a button on the controller the menu appears but I don't know how to make the menu appear when the button is pressed
… Не могли бы вы уточнить это предложение? ^^ Я скорее думаю, что в настоящее время он исчезает , и вы бы вместо жестко закодированного boolfalse
предпочли реализовать метод для его переключения, верно?2. что я пытаюсь сделать, так это создать меню паузы, чтобы при нажатии кнопки открывалось меню, вот и все
Ответ №1:
В настоящее время вы настроили его так, что, когда вы нажимаете кнопку, она вызывает
pauseMenu.SetActive(false);
таким образом, он никогда не включит этот объект.
Вам скорее нужен специальный компонент, такой как, например
public class PauseMenu : MonoBehaviour { // Reference this vis the Inspector in case the PauseMenu is NOT // the same object this component is attached to. // Otherwise it will simply use the same object this is attached to [SerializeField] private GameObject pauseMenu; // Adjust this vis the Inspector // Shall the menu initially be active or not? [SerializeField] private bool initiallyPaused; // Public readonly property so you can make other scripts depend on this // e.g. do not handle User input while pause menu is open etc public bool IsPaused =gt; pauseMenu.activeSelf; // Additionally provide some events yourself so other scripts // can add callbacks and react when you enter or exit paused mode public UnityEvent onEnterPaused; public UnityEvent onExitPaused; public UnityEventlt;boolgt; onPauseStateChanged; private void Awake () { // As fallback use the same object this component is attached to if(!pauseMenu) pauseMenu = gameObject; SetPauseMode(initiallyPaused); } // This is the method you want to call vis your event instead public void TogglePause() { // simply invert the active state SetPauseMode(!IsPaused); } private void SetPauseMode (bool pause) { pauseMenu.SetActive(pause); if(pause) { onEnterPaused.Invoke(); } else { onExitPaused.Invoke(); } onPauseStateChanged.Invoke(pause); } }
Прикрепите это к объекту меню паузы и в случае, если вместо этого ссылаетесь на PauseMenu.TogglePause
метод.
Комментарии:
1. я сделал это, и это работало на моем компьютере, но когда я создавал для Android, это не работало, знаете ли вы, почему это может быть?
2. @Imbackgaming ну и как именно вызывается ваше событие
Left Secondary Activated
?3. извините, я новичок в этом деле, что это значит?
4. Я не знаю ^^ как вы вызываете
TogglePause
метод? Я думал, что вы ссылаетесь на это сейчас в своем случаеLeft Secondary Activated
… Я понятия не имею, как/где это вызывается, но кажется, что это просто не происходит в виртуальной реальности5. это сработало, когда я запустил его на ПК vr, но когда я запустил его на Android, он не проснулся’