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

如何在Unity中使用Google Apps Script?doPost参数获取方法咨询

解决doPost(e)参数查看问题

直接返回e对象会得到[object Object],这是因为JavaScript对象默认的toString()方法只会输出这个标识。要查看完整的参数结构,需要将对象序列化为JSON字符串:

function doPost(e) {
  // 格式化输出参数,方便查看完整结构
  const paramJson = JSON.stringify(e, null, 2);
  return ContentService.createTextOutput(paramJson)
    .setMimeType(ContentService.MimeType.JSON);
}

部署脚本后,用Postman、curl或者Unity发送POST请求,就能看到e的完整结构,包括parameter(form-data格式参数)、postData(JSON请求体)等核心字段。

实现Unity传入ID获取谷歌表格对应行数据

步骤1:配置谷歌表格

假设你的表格第一行是表头(比如ID、Name、Score),从第二行开始是业务数据。

步骤2:编写Google Apps Script

function doPost(e) {
  // 解析请求参数(兼容form-data和JSON两种格式)
  let reqData;
  try {
    // 优先解析JSON请求体(Unity推荐使用这种方式)
    reqData = JSON.parse(e.postData.contents);
  } catch (err) {
    // 解析失败时 fallback 到form-data格式参数
    reqData = e.parameter;
  }

  // 校验ID参数是否存在
  const targetId = reqData.id;
  if (!targetId) {
    return ContentService.createTextOutput(JSON.stringify({
      success: false,
      msg: "缺少ID参数"
    })).setMimeType(ContentService.MimeType.JSON);
  }

  // 打开目标表格(替换成你的表格ID和工作表名称)
  const sheet = SpreadsheetApp.openById("你的表格ID").getSheetByName("Sheet1");
  const allData = sheet.getDataRange().getValues();
  const header = allData[0];
  const dataRows = allData.slice(1); // 跳过表头行

  // 查找对应ID的行数据
  let resultRow = null;
  for (const row of dataRows) {
    // 转字符串避免数字/字符串类型不匹配问题,假设ID在第一列(索引0)
    if (row[0].toString() === targetId.toString()) {
      // 将行数据转为键值对格式,方便Unity解析
      resultRow = {};
      for (let i = 0; i < header.length; i++) {
        resultRow[header[i]] = row[i];
      }
      break;
    }
  }

  // 返回处理结果
  if (resultRow) {
    return ContentService.createTextOutput(JSON.stringify({
      success: true,
      data: resultRow
    })).setMimeType(ContentService.MimeType.JSON);
  } else {
    return ContentService.createTextOutput(JSON.stringify({
      success: false,
      msg: "未找到ID对应的行数据"
    })).setMimeType(ContentService.MimeType.JSON);
  }
}

步骤3:部署为Web应用

  1. 在脚本编辑器点击「部署」→「新部署」
  2. 类型选择「Web应用」
  3. 执行权限选「我」,访问权限选「任何人,甚至匿名」(若需安全验证,可后续添加自定义密钥校验)
  4. 点击部署,复制生成的Web应用URL

步骤4:Unity端调用示例

用UnityWebRequest发送JSON格式请求:

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class SheetDataFetcher : MonoBehaviour
{
    [SerializeField] private string webAppUrl = "你的Web应用URL";

    // 外部调用此方法传入ID获取数据
    public IEnumerator GetDataByID(string targetID)
    {
        // 构造请求数据
        var requestPayload = new { id = targetID };
        string jsonPayload = JsonUtility.ToJson(requestPayload);

        using (UnityWebRequest request = UnityWebRequest.Post(webAppUrl, ""))
        {
            byte[] jsonBytes = System.Text.Encoding.UTF8.GetBytes(jsonPayload);
            request.uploadHandler = new UploadHandlerRaw(jsonBytes);
            request.downloadHandler = new DownloadHandlerBuffer();
            request.SetRequestHeader("Content-Type", "application/json");

            yield return request.SendWebRequest();

            if (request.result != UnityWebRequest.Result.Success)
            {
                Debug.LogError($"请求失败: {request.error}");
            }
            else
            {
                string responseJson = request.downloadHandler.text;
                Debug.Log($"响应数据: {responseJson}");
                
                // 解析响应到自定义序列化类
                SheetResponse response = JsonUtility.FromJson<SheetResponse>(responseJson);
                if (response.success)
                {
                    Debug.Log($"获取到数据: ID={response.data.ID}, Name={response.data.Name}, Score={response.data.Score}");
                }
                else
                {
                    Debug.LogError($"错误信息: {response.msg}");
                }
            }
        }
    }

    // 对应响应JSON结构的序列化类
    [System.Serializable]
    private class SheetResponse
    {
        public bool success;
        public string msg;
        public SheetRowData data;
    }

    [System.Serializable]
    private class SheetRowData
    {
        public string ID;
        public string Name;
        public int Score;
        // 根据你的表格字段添加对应属性
    }
}

注意事项

  • 确保谷歌表格已设置共享权限,允许脚本访问(可设置为「知道链接的任何人可查看」)
  • 修改脚本后需重新部署Web应用,否则调用的仍是旧版本代码
  • 若需更高安全性,可在请求中添加自定义密钥,在脚本中校验密钥合法性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:45:43