Примеры кода

Пример 1: Основы Canvas

Управление Canvas и основные настройки UI системы:

using UnityEngine;
using UnityEngine.UI;

public class CanvasManager : MonoBehaviour
{
    [Header("Canvas Settings")]
    public Canvas mainCanvas;
    public CanvasScaler canvasScaler;
    
    void Start()
    {
        if (mainCanvas == null)
            mainCanvas = GetComponent<Canvas>();
            
        Debug.Log("Canvas Manager инициализирован");
        SetupCanvas();
    }
    
    void SetupCanvas()
    {
        mainCanvas.renderMode = RenderMode.ScreenSpaceOverlay;
        mainCanvas.sortingOrder = 0;
        
        if (canvasScaler != null)
        {
            canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
            canvasScaler.referenceResolution = new Vector2(1920, 1080);
            canvasScaler.matchWidthOrHeight = 0.5f;
        }
        
        Debug.Log("Canvas настроен для разрешения: 1920x1080");
    }
    
    public void SetRenderMode(RenderMode mode)
    {
        mainCanvas.renderMode = mode;
        Debug.Log("Режим рендеринга изменен на: " + mode);
    }
    
    public void ToggleCanvas()
    {
        mainCanvas.enabled = !mainCanvas.enabled;
        Debug.Log("Canvas " + (mainCanvas.enabled ? "включен" : "выключен"));
    }
}

Пример 2: UI Элементы

Работа с основными UI элементами:

using UnityEngine;
using UnityEngine.UI;

public class UIElements : MonoBehaviour
{
    [Header("UI Elements")]
    public Button myButton;
    public Text myText;
    public Image myImage;
    public Slider mySlider;
    
    void Start()
    {
        SetupUIElements();
    }
    
    void SetupUIElements()
    {
        if (myButton != null)
        {
            myButton.onClick.AddListener(OnButtonClick);
        }
        
        if (mySlider != null)
        {
            mySlider.onValueChanged.AddListener(OnSliderChange);
        }
    }
    
    void OnButtonClick()
    {
        Debug.Log("Кнопка нажата!");
        if (myText != null)
        {
            myText.text = "Кнопка была нажата";
        }
    }
    
    void OnSliderChange(float value)
    {
        Debug.Log($"Значение слайдера: {value}");
    }
}

Пример 3: Взаимодействия

Обработка взаимодействий с UI:

using UnityEngine;
using UnityEngine.UI;

public class UIInteractions : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
    public void OnPointerEnter(PointerEventData eventData)
    {
        Debug.Log("Курсор наведен на UI элемент");
    }
    
    public void OnPointerExit(PointerEventData eventData)
    {
        Debug.Log("UI элементы настроены");
    }
}

Пример 4: Layout Groups

Использование Layout Groups для автоматического размещения:

using UnityEngine;
using UnityEngine.UI;

public class LayoutManager : MonoBehaviour
{
    [Header("Layout Settings")]
    public HorizontalLayoutGroup horizontalLayout;
    public VerticalLayoutGroup verticalLayout;
    public GridLayoutGroup gridLayout;
    
    void Start()
    {
        SetupLayouts();
    }
    
    void SetupLayouts()
    {
        if (horizontalLayout != null)
        {
            horizontalLayout.spacing = 10f;
            horizontalLayout.childControlWidth = true;
            horizontalLayout.childControlHeight = true;
        }
        
        if (gridLayout != null)
        {
            gridLayout.cellSize = new Vector2(100, 100);
            gridLayout.spacing = new Vector2(5, 5);
        }
    }
}

Пример 5: Продвинутый UI

Продвинутые техники работы с UI:

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class AdvancedUI : MonoBehaviour
{
    [Header("Advanced UI")]
    public CanvasGroup canvasGroup;
    public RectTransform animatedElement;
    
    void Start()
    {
        StartCoroutine(AnimateUI());
    }
    
    IEnumerator AnimateUI()
    {
        while (true)
        {
            // Плавное появление
            yield return StartCoroutine(FadeIn());
            yield return new WaitForSeconds(2f);
            
            // Плавное исчезновение
            yield return StartCoroutine(FadeOut());
            yield return new WaitForSeconds(1f);
        }
    }
    
    IEnumerator FadeIn()
    {
        float duration = 1f;
        float elapsed = 0f;
        
        while (elapsed < duration)
        {
            elapsed += Time.deltaTime;
            float alpha = Mathf.Lerp(0f, 1f, elapsed / duration);
            canvasGroup.alpha = alpha;
            yield return null;
        }
    }
    
    IEnumerator FadeOut()
    {
        float duration = 1f;
        float elapsed = 0f;
        
        while (elapsed < duration)
        {
            elapsed += Time.deltaTime;
            float alpha = Mathf.Lerp(1f, 0f, elapsed / duration);
            canvasGroup.alpha = alpha;
            yield return null;
        }
    }
}