You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity C#向WebGL Index.html传递数据并填充表格的技术问题

Unity WebGL 将C#数据传递到HTML表格的解决方案

1. 修改WebGL插件(jslib)

替换原弹窗逻辑,改为直接更新HTML表格元素,支持单个字段或批量数据更新:

mergeInto(LibraryManager.library, {
    // 更新对象名称到表格
    UpdateObjectName: function (namePtr) {
        const objectName = Pointer_stringify(namePtr);
        document.getElementById('name').textContent = objectName;
    },
    // 批量更新所有字段(推荐用JSON传递多数据)
    UpdateObjectData: function (jsonPtr) {
        const objectData = JSON.parse(Pointer_stringify(jsonPtr));
        document.getElementById('name').textContent = objectData.name || '';
        document.getElementById('ID').textContent = objectData.id || '';
        document.getElementById('PNr').textContent = objectData.pnr || '';
        document.getElementById('color').textContent = objectData.color || '';
    }
});

2. 调整C#脚本,调用JS方法

修改点击事件脚本,按需选择传递单个数据或批量JSON数据:

using System.Runtime.InteropServices;
using UnityEngine;

public class StackerObject : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void UpdateObjectName(string name);

    [DllImport("__Internal")]
    private static extern void UpdateObjectData(string jsonData);

    void OnMouseDown()
    {
        // 方式1:仅传递名称
        string objName = gameObject.name;
        Debug.Log("发送数据到JS: " + objName);
#if UNITY_WEBGL && !UNITY_EDITOR
        UpdateObjectName(objName);
#endif

        // 方式2:传递完整数据(取消注释即可使用)
        // ObjectData data = new ObjectData
        // {
        //     name = objName,
        //     id = "STACK-" + gameObject.GetInstanceID(),
        //     pnr = "PN-" + transform.GetSiblingIndex(),
        //     color = GetComponent<Renderer>().material.color.ToString()
        // };
        // string json = JsonUtility.ToJson(data);
        // UpdateObjectData(json);
    }

    // 用于序列化的内部数据类
    [System.Serializable]
    private class ObjectData
    {
        public string name;
        public string id;
        public string pnr;
        public string color;
    }
}

3. 确保HTML表格可被访问

你的现有表格结构已满足要求,只需保证表格在DOM中正常加载,未被Unity Canvas遮挡或隐藏:

<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>

注意事项

  • jslib文件必须放在Unity项目的Plugins/WebGL目录下,Unity会自动处理编译。
  • 所有JS调用逻辑需包裹在#if UNITY_WEBGL && !UNITY_EDITOR条件内,避免编辑器报错。
  • 传递复杂数据时,JSON是最可靠的方式,Unity内置的JsonUtility可直接序列化自定义类。

内容的提问来源于stack exchange,提问作者Baranskii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:01:36