105 lines
3.4 KiB
C#
105 lines
3.4 KiB
C#
|
using UnityEngine;
|
|||
|
using UnityEngine.UI;
|
|||
|
using TMPro;
|
|||
|
|
|||
|
public class UIManager : MonoBehaviour
|
|||
|
{
|
|||
|
public static UIManager Instance { get; private set; }
|
|||
|
private TextMeshProUGUI statsText;
|
|||
|
private GameManager gameManager;
|
|||
|
|
|||
|
void Awake()
|
|||
|
{
|
|||
|
if (Instance == null)
|
|||
|
{
|
|||
|
Instance = this;
|
|||
|
DontDestroyOnLoad(gameObject);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
Destroy(gameObject);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
gameManager = FindObjectOfType<GameManager>();
|
|||
|
if (gameManager == null)
|
|||
|
{
|
|||
|
Debug.LogError("GameManager not found!");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
CreateUI();
|
|||
|
}
|
|||
|
|
|||
|
void CreateUI()
|
|||
|
{
|
|||
|
// Проверяем наличие шрифта для WebGL
|
|||
|
if (TMP_Settings.defaultFontAsset == null)
|
|||
|
{
|
|||
|
Debug.LogError("Default TMP font asset is missing! UI text may not be visible in WebGL build.");
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
// Create Canvas
|
|||
|
GameObject canvasObj = new GameObject("StatsCanvas");
|
|||
|
canvasObj.transform.SetParent(transform);
|
|||
|
Canvas canvas = canvasObj.AddComponent<Canvas>();
|
|||
|
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
|
|||
|
canvasObj.AddComponent<CanvasScaler>();
|
|||
|
canvasObj.AddComponent<GraphicRaycaster>();
|
|||
|
|
|||
|
// Create Text object
|
|||
|
GameObject textObj = new GameObject("StatsText");
|
|||
|
textObj.transform.SetParent(canvasObj.transform, false);
|
|||
|
statsText = textObj.AddComponent<TextMeshProUGUI>();
|
|||
|
|
|||
|
// Configure text component
|
|||
|
statsText.font = TMP_Settings.defaultFontAsset;
|
|||
|
statsText.fontSize = 24f;
|
|||
|
statsText.fontStyle = FontStyles.Bold;
|
|||
|
statsText.enableWordWrapping = true;
|
|||
|
statsText.overflowMode = TextOverflowModes.Overflow;
|
|||
|
statsText.horizontalMapping = TextureMappingOptions.Line;
|
|||
|
statsText.verticalMapping = TextureMappingOptions.Line;
|
|||
|
|
|||
|
// Добавляем обводку для лучшей видимости
|
|||
|
statsText.outlineWidth = 0.2f;
|
|||
|
statsText.outlineColor = Color.black;
|
|||
|
|
|||
|
statsText.color = Color.white;
|
|||
|
// Position text in top-left corner
|
|||
|
RectTransform rectTransform = textObj.GetComponent<RectTransform>();
|
|||
|
rectTransform.anchorMin = new Vector2(0, 1);
|
|||
|
rectTransform.anchorMax = new Vector2(0, 1);
|
|||
|
rectTransform.pivot = new Vector2(0, 1);
|
|||
|
rectTransform.anchoredPosition = new Vector2(10, -10);
|
|||
|
rectTransform.sizeDelta = new Vector2(200, 100);
|
|||
|
}
|
|||
|
|
|||
|
void Update()
|
|||
|
{
|
|||
|
if (gameManager != null)
|
|||
|
{
|
|||
|
UpdateStats(
|
|||
|
gameManager.DestroyedBricks,
|
|||
|
gameManager.TotalBricks,
|
|||
|
gameManager.UsedLives,
|
|||
|
gameManager.InitialLives
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void UpdateStats(int destroyedBricks, int totalBricks, int usedLives, int totalLives)
|
|||
|
{
|
|||
|
if (statsText != null)
|
|||
|
{
|
|||
|
// Загружаем номер сборки из ресурсов
|
|||
|
TextAsset buildVersionAsset = Resources.Load<TextAsset>("buildVersion");
|
|||
|
string buildVersion = buildVersionAsset != null ? buildVersionAsset.text : "1";
|
|||
|
|
|||
|
// Обновляем текст с номером сборки
|
|||
|
statsText.text = $"Bricks: {destroyedBricks}/{totalBricks}\nLives Used: {usedLives}/{totalLives}\nBuild: {buildVersion}";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|