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

如何避免为数组类型重复编写Firestore转换器(Firestore+Unity/C#)

解决Firestore中自定义转换器自动支持数组类型的问题

你不需要单独编写Vector2IntArrayConverter,Firestore的Unity SDK支持自动复用单个类型的转换器来处理数组、列表等集合类型,只要做好以下配置:

1. 全局注册自定义转换器

在初始化Firestore实例时,将你的Vector2IntConverter添加到全局转换器列表中。这样SDK会自动将该转换器应用到所有Vector2Int类型的字段,包括数组元素:

// 初始化Firestore数据库时注册全局转换器
FirestoreDb db = FirestoreDb.Create("你的项目ID");
db.Settings.Converters.Add(new Vector2IntConverter());

2. 直接在DTO中使用数组属性

完成全局注册后,你的DTO类中可以直接声明Vector2Int[]类型的属性,无需额外指定转换器,SDK会自动遍历数组元素并调用Vector2IntConverter处理:

[FirestoreData]
public class LevelDataDto
{
    [FirestoreProperty]
    public Vector2Int[] SpawnPositions { get; set; }

    // 单个Vector2Int字段也可以正常使用,无需重复指定转换器
    [FirestoreProperty]
    public Vector2Int PlayerStartPos { get; set; }
}

3. 确保转换器实现正确

检查你的Vector2IntConverter是否正确实现了单个类型的序列化/反序列化逻辑,示例实现如下:

public class Vector2IntConverter : FirestoreConverter<Vector2Int>
{
    public override Vector2Int FromFirestore(object value)
    {
        var data = value as Dictionary<string, object>;
        if (data == null || !data.ContainsKey("x") || !data.ContainsKey("y"))
        {
            throw new ArgumentException("Invalid Vector2Int data from Firestore");
        }
        return new Vector2Int(
            Convert.ToInt32(data["x"]),
            Convert.ToInt32(data["y"])
        );
    }

    public override object ToFirestore(Vector2Int value)
    {
        return new Dictionary<string, object>
        {
            { "x", value.x },
            { "y", value.y }
        };
    }
}

注意事项

  • 确保你使用的是最新版本的Firestore Unity SDK,旧版本可能存在不支持自动适配集合类型的问题。
  • 如果不想全局注册转换器,也可以在DTO的数组属性上通过[FirestoreConverter(typeof(Vector2IntConverter))]指定,但全局注册更简洁,避免重复代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 00:33:18