Pauseui не появляется, потому что событие не подписано, потому что начальная функция не работаетC#

Место общения программистов C#
Ответить
Anonymous
 Pauseui не появляется, потому что событие не подписано, потому что начальная функция не работает

Сообщение Anonymous »

Я делаю пользовательский интерфейс, который появляется, когда вы нажимаете кнопку паузы (клавиша Escape). У моего проекта есть пустой объект Gamemanager, глобальный холст с пустым ребенком, и у этого ребенка есть свой ребенок в качестве черного изображения и сфера, которая будет двигаться и останавливаться, чтобы показать последствия паузы. Таким образом, мой скрипт GameInput прикреплен к движущемуся объекту, который заставляет его двигаться и прослушивает сбежать с ключом с устаревшей системой, которая отпускает событие «OnPause». < /P>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class GameInput : MonoBehaviour
{
public event EventHandler OnPause;
public static GameInput Instance { get; private set; }

[SerializeField]
private float speed;
private void Awake()
{
Instance = this;
}
private void Update()
{
PauseKeyListener();
transform.position += Vector3.up * speed * Time.deltaTime;

}
private void PauseKeyListener()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
OnPause?.Invoke(this, EventArgs.Empty);
}
}

}
< /code>
Это слушается сценарием GameManager, который выполняет функцию TogglePause, которая стреляет либо OnGameUnpaUsed, либо OngamePaUsed. < /p>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class GameManager : MonoBehaviour
{

public static GameManager Instance { get; private set; }

public event EventHandler OnGamePaused;
public event EventHandler OnGameUnpaused;

private bool isGamePaused=true;

private void Awake()
{
Instance = this;
}
private void Start()
{
GameInput.Instance.OnPause += GameInput_OnPause;
}

private void GameInput_OnPause(object sender, EventArgs e)
{
TogglePause();
}

public void TogglePause()
{
isGamePaused = !isGamePaused;
if (isGamePaused)
{
Time.timeScale = 1f;
OnGameUnpaused?.Invoke(this, EventArgs.Empty);
}
else
{
Time.timeScale = 0f;
OnGamePaused?.Invoke(this, EventArgs.Empty);
}
}

}
< /code>
Это должно быть услышано сценарием GamePauseUi, который либо скрывает, либо не подходит для пользовательского интерфейса. Но начальная функция не работает. < /P>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GamePauseUI : MonoBehaviour
{

private void Awake()
{
gameObject.SetActive(false);
}

private void Start()
{
//THIS DOESNT EXECUTE
GameManager.Instance.OnGameUnpaused += GameManager_OnGameUnpaused;
GameManager.Instance.OnGamePaused += GameManager_OnGamePaused;
}

private void GameManager_OnGamePaused(object sender, System.EventArgs e)
{
gameObject.SetActive(true);
}

private void GameManager_OnGameUnpaused(object sender, System.EventArgs e)
{
gameObject.SetActive(false);
}

}
< /code>
Я проверил, выполняет ли он GamameUnpaUsed или Ongamepaused, выполняя отладон .log в каждой отрасли функции TogglePause (GameManager) и показывает, что, несомненно, означает, что события выпускаются. Но когда я отлаживаю. Странно, бодрый вызов работает, это только начальная функция.

Подробнее здесь: https://stackoverflow.com/questions/797 ... nction-not
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»