# Unity

Після публікації миттєвої або турнірної гри її можна інтегрувати в мобільний додаток або гру, створену за допомогою Unity.

### Огляд

Клас WindayWrapper надає функціонал для відображення та взаємодії з контентом у **Unity за допомогою WebView**.

Він дозволяє завантажувати веб-сторінки, обробляти події та спілкуватися з контентом за допомогою JavaScript.

### Налаштування

1. Завантажте Winday [<mark style="color:blue;">**Unity Plugin**</mark>](https://drive.google.com/file/d/1a1e56cIPCsw9m6pG55TSM-Cku5be1N0f/view?usp=sharing).
2. Установіть плагін і перемкніть випадаюче меню Internet Access: Required у Project settings.

### Конструктор

#### WindayWrapper()

Опис: ініціалізує WebView та налаштовує обробники подій.

Приклад:

{% code overflow="wrap" %}

```csharp
WindayWrapper webView = new WindayWrapper();
```

{% endcode %}

### Методи

#### 1. Subscribe(string eventName, Action callback)

Опис: Підписується на подію, яка не передає жодних даних. Зворотний виклик буде виконано, коли спрацює подія.

Параметри:

* eventName: Назва події для прослуховування.
* callback: Дія, яка виконується під час ініціювання події.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("exit-mobile-plugin", () => { Debug.Log("Exiting the mobile plugin."); });
```

{% endcode %}

#### 2. Subscribe\<T>(string eventName, Action\<T> callback) where T : class

Опис: Підписка на подію, яка передає дані. Зворотний виклик отримає дані, пов’язані з подією.

Параметри:

* eventName: Назва події.
* callback: Дія, яка виконується під час ініціювання події, отримання даних типу T.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe<GameColors>("winday-game-colors", (colors) => { Debug.Log($"Colors received: Yellow - {colors.yellow}, Blue - {colors.blue}, Red - {colors.red}, Green - {colors.green}, Purple - {colors.purple}"); });
```

{% endcode %}

#### 3. Unsubscribe(string eventName)

Опис: Скасовує підписку на попередньо підписану подію, видаляючи всі зворотні виклики, пов’язані з подією.

Параметр:

* eventName: Назва події, від якої потрібно скасувати підписку.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Unsubscribe("exit-mobile-plugin");
```

{% endcode %}

#### 4. SetVisible(bool visible)

Опис: Встановлює видимість WebView. Коли WebView відображається, він інтерактивний.

Параметр:

* visible: true, щоб зробити WebView видимим, false, щоб приховати його.

Приклад:

```csharp
webView.SetVisible(true);  // Shows the WebView
```

#### 5. LoadPage(string url)

Опис: Завантажує веб-сторінку в WebView за допомогою вказаної URL-адреси.

Параметр:

* url: URL-адреса веб-сторінки для завантаження.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.LoadPage("https://winday.club/games/VMPWRL3Y?isMobile=true");
```

{% endcode %}

#### 6. SetMargins(int left, int top, int right, int bottom, bool relative = false)

Опис: Встановлює поля WebView, визначаючи його розташування на екрані.

Параметри:

* left: Ліве поле в пікселях.
* top: Верхнє поле в пікселях.
* right: Праве поле в пікселях.
* bottom: Нижнє поле в пікселях.
* relative: Якщо значення true, поля визначаються у відсотках від розміру екрана; інакше вони в пікселях.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.SetMargins(10, 10, 10, 10);  // Set 10px margins on all sides
```

{% endcode %}

#### 7. OnPageStartLoading

Опис: Ця подія запускається, коли нова веб-сторінка починає завантажуватися в WebView. Він надає URL-адресу сторінки, яка починає завантажуватися.

Приклад:

{% code overflow="wrap" lineNumbers="true" %}

```csharp
// Instantiate the WindayWrapper
WindayWrapper webViewWrapper = new WindayWrapper();

// Subscribe to the OnPageStartLoading event
webViewWrapper.OnPageStartLoading += (url) =>
{
    Debug.Log($"Page is starting to load: {url}");
};

// Load a new page
webViewWrapper.LoadPage("https://example.com");
```

{% endcode %}

#### 8. OnPageLoaded

Опис: Ця подія запускається, коли веб-сторінка успішно завантажується. Він також надає URL-адресу завантаженої сторінки.

Приклад:

{% code overflow="wrap" lineNumbers="true" %}

```csharp
// Subscribe to the OnPageLoaded event
webViewWrapper.OnPageLoaded += (url) =>
{
    Debug.Log($"Page has finished loading: {url}");
    webViewWrapper.Show();
};

// Load a new page
webViewWrapper.LoadPage("https://example.com");
```

{% endcode %}

#### 9. OnClosed

Опис: Ця подія спрацьовує, коли WebView знищується або закривається. Це сигналізує про те, що WebView більше не активний і його видалено зі сцени.

Приклад:

{% code overflow="wrap" lineNumbers="true" %}

```csharp
// Subscribe to the OnClosed event
webViewWrapper.OnСlosed += () =>
{
    Debug.Log("WebView has been closed.");
};

// Destroy the WebView
webViewWrapper.Destroy();
```

{% endcode %}

### Приклади Подій

#### exit-mobile-plugin

Опис: Запускається, коли користувач хоче вийти з мобільного плагіна.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("exit-mobile-plugin", () => { Debug.Log("Exiting mobile plugin."); });
```

{% endcode %}

#### winday-game-win

Опис: Запускається, коли користувач виграє гру.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("winday-game-win", () => { Debug.Log("Player has won the game!"); });
```

{% endcode %}

#### winday-game-lose

Опис: Запускається, коли користувач програє гру.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("winday-game-lose", () => { Debug.Log("Player has lost the game."); });
```

{% endcode %}

#### winday-game-tutorial-start

Опис: Запускається, коли починається туторіал.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("winday-game-tutorial-start", () => { Debug.Log("Tutorial has started."); });
```

{% endcode %}

#### winday-game-tutorial-complete

Опис: Запускається, коли туторіал завершено.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe("winday-game-tutorial-complete", () => { Debug.Log("Tutorial is complete."); });
```

{% endcode %}

#### winday-game-colors

Опис: Запускається, коли надсилаються дані кольору гри.

Приклад:

{% code overflow="wrap" %}

```csharp
webView.Subscribe<GameColors>("winday-game-colors", (colors) => { Debug.Log($"Colors: Yellow - {colors.yellow}, Blue - {colors.blue}, Red - {colors.red}, Green - {colors.green}, Purple - {colors.purple}"); });
```

{% endcode %}
