ArkanoidTG/Assets/Scripts/UIManager.cs

105 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}";
}
}
}