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

Unity中如何用I2 Localization从Google Sheets逐行取数并赋值变量?

用I2 Localization从Google Sheets逐行读取并赋值数据的方案

嘿,既然你已经成功连上Google Sheets了,接下来逐行拿数据其实比之前处理CSV省心多——I2已经帮你把行列结构解析好了,不用自己手动分割字符串啦!我给你梳理具体步骤和代码示例:

1. 先确保数据加载完成(这步很关键!)

Google Sheets的数据是异步加载的,所以必须等本地化系统准备好再去读数据,不然会拿到空值。你可以通过监听回调来处理:

2. 获取目标Sheet并逐行遍历

I2 Localization把每个Google Sheet都封装成了Sheet对象,你可以通过名称找到目标表格,然后遍历它的Rows集合来逐行取数据:

using UnityEngine;
using I2.Loc;

public class SheetDataLoader : MonoBehaviour
{
    void Start()
    {
        // 检查本地化是否就绪,没就绪就等回调触发
        if (!LocalizationManager.IsReady)
        {
            LocalizationManager.OnLocalizationReady += ProcessSheetData;
            return;
        }

        // 已经就绪的话直接处理数据
        ProcessSheetData();
    }

    void ProcessSheetData()
    {
        // 替换成你Google Sheets里的目标Sheet名称
        string targetSheetName = "你的表格名称";
        var targetSheet = LocalizationManager.Sheets.Find(sheet => sheet.Name == targetSheetName);

        if (targetSheet == null)
        {
            Debug.LogError($"找不到名为 {targetSheetName} 的Sheet,请检查名称是否正确!");
            return;
        }

        // 逐行遍历数据(如果第一行是表头,就从索引1开始跳过表头)
        for (int i = 0; i < targetSheet.Rows.Count; i++)
        {
            var currentRow = targetSheet.Rows[i];

            // 方式1:通过列名获取单元格数据(更直观,推荐用这个)
            string attribute1 = currentRow.GetCellValue("属性列名1");
            string attribute2 = currentRow.GetCellValue("属性列名2");
            int numericAttr = int.Parse(currentRow.GetCellValue("数字属性列名")); // 非字符串类型记得转格式

            // 方式2:通过列索引获取(索引从0开始)
            // string attribute1 = currentRow.Cells[0].Value;
            // string attribute2 = currentRow.Cells[1].Value;

            // 这里就可以把数据赋值给变量,或者执行你之前创建GameObject的逻辑啦
            Debug.Log($"第{i+1}行数据:属性1={attribute1},属性2={attribute2}");
            // 你的业务逻辑:创建GameObject、设置特定属性等
        }
    }

    // 销毁时移除回调,避免内存泄漏
    void OnDestroy()
    {
        LocalizationManager.OnLocalizationReady -= ProcessSheetData;
    }
}

3. 一些实用小提示

  • 跳过表头行:如果你的Google Sheets第一行是列名(比如“属性1”“属性2”),遍历的时候把i的起始值改成1,就不会把表头当成数据行处理了。
  • 数据类型转换:如果单元格里是数字、布尔值这类非字符串数据,记得用int.Parse()、float.Parse()或者bool.Parse()做类型转换。
  • 实时刷新数据:如果需要手动触发重新拉取Google Sheets的数据,可以调用LocalizationManager.LoadSources();,同样要等OnLocalizationReady回调确认加载完成。

这样处理下来,完全能替代你之前手动分割CSV的流程,而且I2还帮你处理了同步、解析的细节,比之前的方案更稳定~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:21:02