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

能否通过GitHub处理HTTP请求?Unity项目跨设备存公网数据

解决方案:Unity公共计分板的免费实现方案

一、修正你的UnityWebRequest Get代码

你的拉取代码可以补充错误处理,避免请求失败时无提示:

IEnumerator GetScoreboard(string url)
{
    using (UnityWebRequest www = UnityWebRequest.Get(url))
    {
        yield return www.SendWebRequest();

        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError("拉取计分板失败: " + www.error);
        }
        else
        {
            Debug.Log("获取到计分板内容: " + www.downloadHandler.text);
            // 这里调用你的解析逻辑
        }
    }
}

二、GitHub方案的写入可行方式

GitHub Pages是静态托管,无法通过HTML脚本直接修改文件,但可以用GitHub REST API在Unity里直接修改仓库里的txt文件,无需Octokit:

  1. 生成GitHub个人访问令牌:在GitHub设置里生成带repo权限的令牌,注意不要把令牌打包到游戏客户端,否则会泄露仓库权限,短期测试可以用,后续换专业托管时再移除
  2. 用UnityWebRequest发送PUT请求到GitHub内容API:
IEnumerator UpdateGitHubTxt(string repoOwner, string repoName, string filePath, string content, string token)
{
    string apiUrl = $"https://api.github.com/repos/{repoOwner}/{repoName}/contents/{filePath}";
    // 把内容转成Base64编码
    string base64Content = System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(content));
    
    string jsonBody = JsonUtility.ToJson(new GitHubUpdateRequest{
        message = "更新计分板",
        content = base64Content
    });

    using (UnityWebRequest www = UnityWebRequest.Put(apiUrl, jsonBody))
    {
        www.SetRequestHeader("Authorization", $"token {token}");
        www.SetRequestHeader("Content-Type", "application/json");
        
        yield return www.SendWebRequest();

        if (www.result != UnityWebRequest.Result.Success)
        {
            Debug.LogError("更新GitHub文件失败: " + www.error);
        }
        else
        {
            Debug.Log("文件更新成功");
        }
    }
}

// 辅助类用于序列化JSON
[System.Serializable]
public class GitHubUpdateRequest
{
    public string message;
    public string content;
}

三、Google Drive方案的可行性与实现要点

Google Drive完全适合你的短期需求,免费额度足够小型玩家群体使用:

  • 核心优势:普通账号有15GB存储,API请求限额远高于多数免费后端服务,操作门槛较低
  • 实现步骤:
    1. 上传计分板txt到Google Drive,设置为公开可编辑(给特定服务账号权限更安全),获取文件ID(从共享链接里提取)
    2. 拉取内容:直接用公开下载链接,把共享链接的/file/d/{文件ID}/view替换为/uc?id={文件ID},用你现有的Get请求代码拉取即可
    3. 更新内容:使用Google Drive API的Files: update接口,需要用服务账号授权(避免客户端暴露个人账号信息),Unity里可以通过生成JWT令牌来调用API,或者使用轻量的JWT库处理授权逻辑
  • 搜索关键词:Google Drive API Unity 文件更新、Google Drive 服务账号 Unity、Unity Google Drive 读写

四、其他短期免费替代方案

  • Firebase Realtime Database:官方提供Unity SDK,直接读写键值对(比如scores/{用户名} = 分数),免费层有1GB存储和10GB月带宽,每天5万次请求限额,足够小型测试使用,比自己维护txt解析更高效
  • 注意:所有免费方案都要做基础校验(比如限制分数范围、用户名长度),防止恶意提交垃圾数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 07:19:52