Примеры кода
Пример 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;
}
}
}