Как можно передать значения переменной из JavaScript (WebGL) в C# в Unity?

Как можно передать значение, выводимое в строке <pre><code>console.log(`Значение HighScore: ${highScore.value}`);</code></pre>, чтобы оно отображалось в текстовом поле Unity (версия 2022.3.56f1)?
  • 17 марта 2025 г. 14:24
Ответы на вопрос 2
Чтобы передать значения из JavaScript (веб-приложения, основанного на WebGL) в C# (Unity), вам нужно использовать механизм передачи сообщений, предоставляемый Unity, который позволяет взаимодействовать между JavaScript и C#.

Вот пошаговая инструкция, как это сделать:

### Шаг 1: Используйте JavaScript для отправки сообщения в Unity

В вашем JavaScript-коде вы можете использовать следующие функции для отправки сообщения в C#:

```javascript
// Пример определения переменной highScore
let highScore = { value: 100 }; // вместо 100 подставьте актуальное значение

// Функция для отправки значения в Unity
function sendHighScoreToUnity() {
    // Если Unity загружена
    if (typeof (unityInstance) !== 'undefined') {
        unityInstance.SendMessage('GameManager', 'ReceiveHighScore', highScore.value);
    } else {
        console.log('Unity не загружена');
    }
}

// Вызов функции для отправки значения
sendHighScoreToUnity();
```

Здесь `unityInstance` — это ссылка на ваш экземпляр Unity, которая создается автоматически при загрузке WebGL-игры.

### Шаг 2: Создайте C# скрипт в Unity для получения сообщений

Создайте новый C# скрипт в Unity (например, `GameManager.cs`) и добавьте метод, который будет получать данные:

```csharp
using UnityEngine;
using UnityEngine.UI; // Импортируем для работы с UI

public class GameManager : MonoBehaviour
{
    public Text highScoreText; // Ссылка на текстовое поле, где будет отображаться значение

    // Метод для получения значения high score из JavaScript
    public void ReceiveHighScore(string highScore)
    {
        // Отображаем значение в текстовом поле
        highScoreText.text = "HighScore: " + highScore;
        Debug.Log("Получен HighScore: " + highScore); // Логируем для проверки
    }
}
```

### Шаг 3: Подключите текстовое поле в Unity

1. Перейдите в Unity и создайте текстовое поле (UI -> Text).
2. Назначьте переменную `highScoreText` в вашем скрипте (переместите текстовое поле в соответствующее поле в инспекторе).

### Шаг 4: Сборка и тестирование

Теперь, когда вы соберете ваше приложение для WebGL и откроете его в веб-браузере, функция в JavaScript должна успешно отправить значение высоких очков в Unity, а ваш текст в текстовом поле будет обновлен.

### Примечания

- Убедитесь, что имя объекта (`GameManager` в примере) и маршрут метода совпадают. C# метод `ReceiveHighScore` должен быть публичным и в одном из активных компонентов объекта.
- Проверяйте консоль на наличие сообщений и ошибок, если что-то не работает как ожидалось.
- Обратите внимание, что передаваемое значение будет в формате `string`. Если вам нужно работать с числами, вы можете конвертировать его в `int` или `float` на стороне C#.
https://docs.unity3d.com/Manual/webgl-interactingw... . Конкретно - Call Unity C# script functions from JavaScript
Похожие вопросы