355 lines
9.0 KiB
Markdown
355 lines
9.0 KiB
Markdown
# Main Menu UI - Unity UI Toolkit Guide
|
|
|
|
## 📋 Přehled
|
|
|
|
Tento projekt obsahuje moderní hlavní menu vytvořené pomocí **Unity UI Toolkit** (dříve UIElements) s využitím **UXML** pro strukturu a **USS** (Unity Style Sheets) pro styling.
|
|
|
|
## 📁 Struktura souborů
|
|
|
|
```
|
|
Assets/UI/
|
|
├── MainMenu.uxml # Struktura UI (HTML-like)
|
|
├── MainMenuStyles.uss # Styly (CSS-like)
|
|
├── Scripts/
|
|
│ └── MainMenuController.cs # Logika a funkčnost
|
|
└── README.md # Tento soubor
|
|
```
|
|
|
|
## 🚀 Jak začít
|
|
|
|
### 1. Nastavení scény
|
|
|
|
1. Vytvořte novou scénu (nebo použijte existující)
|
|
2. Přidejte **GameObject** → **UI Toolkit** → **UI Document**
|
|
3. V inspektoru UI Document:
|
|
- Přiřaďte `MainMenu.uxml` do pole **Source Asset**
|
|
- Panel Settings můžete vytvořit: **Assets** → **Create** → **UI Toolkit** → **Panel Settings Asset**
|
|
|
|
### 2. Připojení controlleru
|
|
|
|
1. Na stejný GameObject přidejte komponentu `MainMenuController`
|
|
2. Přiřaďte UIDocument komponentu do pole **UI Document**
|
|
3. Nastavte název herní scény v **Game Scene Name**
|
|
|
|
### 3. (Volitelné) Přidání zvuků
|
|
|
|
1. Přidejte **Audio Source** komponentu
|
|
2. Přiřaďte zvukové efekty pro tlačítka:
|
|
- Button Click Sound
|
|
- Button Hover Sound
|
|
|
|
## 🎨 Jak upravit styly (USS)
|
|
|
|
### Základní vlastnosti CSS/USS
|
|
|
|
USS používá syntax velmi podobnou CSS. Zde jsou nejčastější vlastnosti:
|
|
|
|
#### Layout & Spacing
|
|
```css
|
|
.my-element {
|
|
width: 300px; /* Šířka */
|
|
height: 50px; /* Výška */
|
|
margin: 10px; /* Vnější odsazení */
|
|
padding: 20px; /* Vnitřní odsazení */
|
|
|
|
flex-direction: row; /* row | column */
|
|
justify-content: center; /* center | flex-start | flex-end | space-between */
|
|
align-items: center; /* center | flex-start | flex-end | stretch */
|
|
}
|
|
```
|
|
|
|
#### Barvy & Pozadí
|
|
```css
|
|
.my-element {
|
|
background-color: rgb(76, 175, 80); /* RGB barva */
|
|
background-color: rgba(76, 175, 80, 0.5); /* RGB s průhledností */
|
|
background-image: url('project://database/Assets/Images/bg.png');
|
|
|
|
color: white; /* Barva textu */
|
|
opacity: 0.8; /* Průhlednost (0-1) */
|
|
}
|
|
```
|
|
|
|
#### Borders & Shadows
|
|
```css
|
|
.my-element {
|
|
border-width: 2px;
|
|
border-color: rgb(255, 255, 255);
|
|
border-radius: 8px; /* Zaoblené rohy */
|
|
|
|
/* Stíny v Unity - používají se přes shadow properties */
|
|
}
|
|
```
|
|
|
|
#### Typography
|
|
```css
|
|
.my-element {
|
|
font-size: 24px;
|
|
-unity-font-style: bold; /* normal | bold | italic | bold-and-italic */
|
|
-unity-text-align: middle-center; /* upper-left | upper-center | upper-right ... */
|
|
letter-spacing: 2px;
|
|
color: white;
|
|
}
|
|
```
|
|
|
|
#### Transitions & Animations
|
|
```css
|
|
.my-button {
|
|
transition-duration: 0.3s;
|
|
transition-property: background-color, scale;
|
|
}
|
|
|
|
.my-button:hover {
|
|
background-color: rgb(100, 200, 100);
|
|
scale: 1.1 1.1; /* X Y scale */
|
|
translate: 0 -5px; /* X Y translation */
|
|
rotate: 5deg; /* Rotation */
|
|
}
|
|
|
|
.my-button:active {
|
|
scale: 0.95 0.95;
|
|
}
|
|
```
|
|
|
|
### CSS Variables (Custom Properties)
|
|
|
|
V `:root` můžete definovat proměnné:
|
|
|
|
```css
|
|
:root {
|
|
--color-primary: rgb(76, 175, 80);
|
|
--spacing-md: 16px;
|
|
}
|
|
|
|
.button {
|
|
background-color: var(--color-primary);
|
|
padding: var(--spacing-md);
|
|
}
|
|
```
|
|
|
|
### Pseudo-třídy
|
|
|
|
Unity podporuje následující pseudo-třídy:
|
|
|
|
- `:hover` - Po najetí myší
|
|
- `:active` - Při kliknutí
|
|
- `:focus` - Při zaměření
|
|
- `:checked` - Pro toggle/checkbox (zaškrtnuté)
|
|
- `:disabled` - Pro zakázané elementy
|
|
|
|
### Užitečné Unity-specifické vlastnosti
|
|
|
|
```css
|
|
.element {
|
|
/* Display */
|
|
display: flex; /* flex | none */
|
|
visibility: hidden; /* visible | hidden */
|
|
|
|
/* Position */
|
|
position: absolute; /* relative | absolute */
|
|
|
|
/* Unity Text */
|
|
-unity-text-outline-width: 1px;
|
|
-unity-text-outline-color: black;
|
|
|
|
/* Background */
|
|
-unity-background-scale-mode: scale-to-fit; /* stretch-to-fill | scale-and-crop | scale-to-fit */
|
|
-unity-slice-left: 10; /* Pro 9-slice sprites */
|
|
}
|
|
```
|
|
|
|
## 💡 Tipy pro kvalitní UI
|
|
|
|
### 1. Konzistentní Design System
|
|
|
|
- Používejte **CSS proměnné** pro barvy, spacing, atd.
|
|
- Definujte paletu barev (primary, secondary, danger, success)
|
|
- Používejte konzistentní spacing (4px, 8px, 16px, 24px, ...)
|
|
|
|
### 2. Hierarchie a Layout
|
|
|
|
```
|
|
Container (flex-direction: column)
|
|
├─ Header (title, subtitle)
|
|
├─ Content (flex-grow: 1)
|
|
│ └─ Items (padding, margin)
|
|
└─ Footer (version, copyright)
|
|
```
|
|
|
|
### 3. Vizuální Feedback
|
|
|
|
- **Hover efekty**: Změna barvy, scale, shadow
|
|
- **Active stavy**: Scale down při kliknutí
|
|
- **Transitions**: Plynulé přechody (0.2-0.3s)
|
|
- **Disabled stavy**: Opacity 0.5, šedá barva
|
|
|
|
### 4. Responzivní Design
|
|
|
|
```css
|
|
.container {
|
|
width: 80%; /* Procenta z rodiče */
|
|
max-width: 800px; /* Maximální šířka */
|
|
min-width: 400px; /* Minimální šířka */
|
|
}
|
|
```
|
|
|
|
### 5. Accessibility
|
|
|
|
- Dostatečný kontrast textu (světlý text na tmavém pozadí)
|
|
- Viditelné focus stavy
|
|
- Dostatečně velké klikací oblasti (min. 44x44px)
|
|
|
|
## 🎯 Best Practices
|
|
|
|
### DO ✅
|
|
|
|
1. **Používejte třídy** místo inline stylů
|
|
2. **Organizujte styly** do sekcí s komentáři
|
|
3. **Používejte Flexbox** pro layout
|
|
4. **Testujte na různých rozlišeních**
|
|
5. **Používejte USS proměnné** pro opakující se hodnoty
|
|
|
|
### DON'T ❌
|
|
|
|
1. ❌ Nekopírujte stejné styly - použijte třídy
|
|
2. ❌ Nepřeužívejte `position: absolute`
|
|
3. ❌ Nepoužívejte pevné velikosti tam, kde není nutné
|
|
4. ❌ Nezapomeňte na hover a focus stavy
|
|
5. ❌ Nepoužívejte příliš mnoho animací najednou
|
|
|
|
## 🔧 Debugging UI
|
|
|
|
### 1. UI Debugger
|
|
|
|
V Unity editoru:
|
|
- **Window** → **UI Toolkit** → **Debugger**
|
|
- Vyberte váš UI Document
|
|
- Prohlížejte strukturu a živé styly
|
|
|
|
### 2. Inspector
|
|
|
|
- Klikněte na element v Debuggeru
|
|
- V pravém panelu vidíte všechny aplikované styly
|
|
- Můžete je dočasně měnit pro testování
|
|
|
|
### 3. Console Log
|
|
|
|
V C# můžete debugovat:
|
|
```csharp
|
|
var button = root.Q<Button>("MyButton");
|
|
Debug.Log($"Button found: {button != null}");
|
|
Debug.Log($"Button classes: {string.Join(", ", button.GetClasses())}");
|
|
```
|
|
|
|
## 📚 Další zdroje
|
|
|
|
### Oficiální dokumentace Unity
|
|
|
|
- [UI Toolkit Manual](https://docs.unity3d.com/Manual/UIElements.html)
|
|
- [USS Properties Reference](https://docs.unity3d.com/Manual/UIE-USS-Properties-Reference.html)
|
|
- [UXML Element Reference](https://docs.unity3d.com/Manual/UIE-ElementRef.html)
|
|
|
|
### CSS Základy
|
|
|
|
Protože USS je založeno na CSS, můžete využít:
|
|
- [MDN CSS Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS)
|
|
- [CSS Flexbox Guide](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)
|
|
|
|
### Unity Learn
|
|
|
|
- [UI Toolkit Tutorial](https://learn.unity.com/tutorial/ui-toolkit)
|
|
|
|
## 🎨 Doporučené Color Palettes
|
|
|
|
### Gamin Palette (Dark)
|
|
```css
|
|
--bg-dark: rgb(18, 18, 18);
|
|
--bg-medium: rgb(33, 33, 33);
|
|
--bg-light: rgb(48, 48, 48);
|
|
--accent: rgb(76, 175, 80); /* Green */
|
|
--accent-alt: rgb(33, 150, 243); /* Blue */
|
|
--danger: rgb(244, 67, 54); /* Red */
|
|
```
|
|
|
|
### Minimalist (Light)
|
|
```css
|
|
--bg-light: rgb(250, 250, 250);
|
|
--bg-medium: rgb(240, 240, 240);
|
|
--bg-dark: rgb(224, 224, 224);
|
|
--accent: rgb(96, 125, 139); /* Blue Grey */
|
|
--text-dark: rgb(33, 33, 33);
|
|
```
|
|
|
|
## 🚀 Rozšíření
|
|
|
|
### Přidání nového tlačítka
|
|
|
|
1. **V UXML**:
|
|
```xml
|
|
<ui:Button text="NEW BUTTON" name="NewButton" class="menu-button" />
|
|
```
|
|
|
|
2. **V C#**:
|
|
```csharp
|
|
private Button newButton;
|
|
|
|
private void InitializeMenuButtons()
|
|
{
|
|
newButton = root.Q<Button>("NewButton");
|
|
}
|
|
|
|
private void RegisterButtonEvents()
|
|
{
|
|
if (newButton != null)
|
|
{
|
|
newButton.clicked += OnNewButtonClicked;
|
|
AddHoverEffects(newButton);
|
|
}
|
|
}
|
|
|
|
private void OnNewButtonClicked()
|
|
{
|
|
Debug.Log("New button clicked!");
|
|
}
|
|
```
|
|
|
|
### Vlastní komponenta
|
|
|
|
Můžete vytvořit vlastní reusable komponenty v UXML:
|
|
|
|
```xml
|
|
<!-- CustomCard.uxml -->
|
|
<ui:UXML>
|
|
<ui:VisualElement class="card">
|
|
<ui:Label name="CardTitle" class="card-title" />
|
|
<ui:Label name="CardDescription" class="card-description" />
|
|
</ui:VisualElement>
|
|
</ui:UXML>
|
|
```
|
|
|
|
A použít je:
|
|
```xml
|
|
<ui:Template src="CustomCard.uxml" name="CardTemplate" />
|
|
<ui:Instance template="CardTemplate" />
|
|
```
|
|
|
|
---
|
|
|
|
## 📝 Poznámky
|
|
|
|
- USS nepodporuje všechny CSS vlastnosti (např. `box-shadow`)
|
|
- Animace jsou omezené - komplexní animace dělejte v C#
|
|
- Performance: USS je velmi rychlé, ale zbytečně neměňte styly každý frame
|
|
|
|
## 🤝 Podpora
|
|
|
|
Pokud narazíte na problém:
|
|
1. Zkontrolujte Unity Console pro chyby
|
|
2. Použijte UI Toolkit Debugger
|
|
3. Ověřte, že jsou správně přiřazené všechny reference
|
|
4. Zkontrolujte, zda jsou názvy elementů správně
|
|
|
|
---
|
|
|
|
**Vytvořeno pro Unity 2022.3+ s UI Toolkit**
|