У меня есть проект, где вы используете укладчик. так это выглядит в браузере
Я хочу отправить данные из кода С#, например, имя выбранного объекта и т. д., в 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>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать собственный 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 или другие библиотеки.