能否通过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:
- 生成GitHub个人访问令牌:在GitHub设置里生成带
repo权限的令牌,注意不要把令牌打包到游戏客户端,否则会泄露仓库权限,短期测试可以用,后续换专业托管时再移除 - 用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请求限额远高于多数免费后端服务,操作门槛较低
- 实现步骤:
- 上传计分板txt到Google Drive,设置为公开可编辑(给特定服务账号权限更安全),获取文件ID(从共享链接里提取)
- 拉取内容:直接用公开下载链接,把共享链接的
/file/d/{文件ID}/view替换为/uc?id={文件ID},用你现有的Get请求代码拉取即可 - 更新内容:使用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
相关产品推荐
相关产品推荐

