Отправка данных из кода Unity С# в мой HTML-индекс WebGl

У меня есть проект, где вы используете укладчик. так это выглядит в браузере

Я хочу отправить данные из кода С#, например, имя выбранного объекта и т. д., в HTML-индекс webgl, чтобы продемонстрировать данные с правой стороны, где находится таблица данных.

Я уже пытался использовать файл jslib, но я не мог сохранить полученные данные, я мог просто показать предупреждение с именем выбранного объекта.

это мой код jslib, где я пробовал его с предупреждением.

mergeInto(LibraryManager.library, {

    SendData: function (data){
        window.alert(Pointer_stringify(data));
    },
});

Это мой код C#, в котором я просто отправляю имя объекта для его проверки.

[DllImport("__Internal")]
   private static extern void SendData(string data);

   void OnMouseDown(){
      string data = gameObject.name;
      Debug.Log("Sending message to Js: "+ data);
      #if UNITY_WEBGL && !UNITY_EDITOR
      SendData(data);
      #endif
   }

Я хочу получить данные в эту таблицу в index.html

<table>
    <tr>
      <th class = "type">Data</th>
      <th>Value</th>
    </tr>
    <tr>
      <td>Name:</td>
      <td id = "name"></td>
    </tr>
    <tr>
      <td>ID:</td>
      <td id = "ID"></td>
    </tr>
    <tr>
      <td>PNr:</td>
      <td id = "PNr"></td>
    </tr>
    <tr>
      <td>Color:</td>
      <td id = "color"></td>
    </tr>
  </table>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать собственный JavaScript для работы с элементами DOM:

mergeInto(LibraryManager.library, {
    SendData: function (json) {
        const data = JSON.parse(UTF8ToString(json));
        
        const nameField = document.getElementById("name");
        const idField = document.getElementById("ID");
        const pnrField = document.getElementById("PNr");
        const colorField = document.getElementById("color");
        
        nameField.innerText = data.Name;
        idField.innerText = data.Id;
        pnrField.innerText = data.Pnr;
        colorField.innerText = data.Color;
    },
});

и на стороне управляемого кода:

using System;
using System.Runtime.InteropServices;
using UnityEngine;
using Random = UnityEngine.Random;

public class Sender : MonoBehaviour
{    
    [DllImport("__Internal")]
    private static extern void SendData(string json);
    
    private readonly string[] colors = { "black", "blue", "cyan", "white" };
    
    [Serializable]
    private struct Info
    {
        public int Id;
        public string Name;
        public string Pnr;
        public string Color;
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            var info = new Info();
            info.Name = "player_" + Random.Range(0, 1000);
            info.Id = Random.Range(0, 1000);
            info.Pnr = "pnr_" + Random.Range(0, 1000);
            info.Color = colors[Random.Range(0, colors.Length)];

            var json = JsonUtility.ToJson(info);
#if !UNITY_EDITOR && UNITY_WEBGL
            SendData(json);
#endif
        }
    }
}

Я использовал JSON и структуру для передачи в JS, но есть возможность передавать каждый параметр отдельно или создать свой парсер вместо JSON.

Мы должны использовать UTF8ToString вместо Pointer_stringify, потому что функция JavaScript «Pointer_stringify (ptrToSomeCString)» устарела и будет удалена в будущей версии Unity.

Нативный JS не очень удобен, если нужно обновить много элементов. Лучше использовать JQuery или другие библиотеки.

Другие вопросы по теме