Unity3D 中的自定义 protobuf-net RuntimeTypeModel - 无法加载文件或程序集

Custom protobuf-net RuntimeTypeModel in Unity3D - Could not load file or assembly

我正在尝试使用此功能在 Unity3D 中构建自定义 protobuf-net RuntimeTypeModel:

private static RuntimeTypeModel GetModel()
{
    RuntimeTypeModel typeModel = TypeModel.Create();

    foreach (var t in GetTypes(CompilationPipeline.GetAssemblies()))
    {
        var contract = t.GetCustomAttributes(typeof(ProtoContractAttribute), false);
        if (contract.Length > 0)
        {
            typeModel.Add(t, true);

            //add unity types
            typeModel.Add(typeof(Vector2), false).Add("x", "y");
            typeModel.Add(typeof(Vector3), false).Add("x", "y", "z");
        }
    }

    return typeModel;
}

模型已构建,但当它尝试使用它时,我一直在 Unity 编辑器中遇到装配错误。 - 无法加载文件或程序集 UnityEngine.UI、UnityEngine.Purchasing、Assembly-CSharp 等 使用 RuntimeTypeModel.Default 时没有错误。

奇怪的是Unity启动后第二次进入播放模式才显示错误。第一次播放没有错误,当我退出播放模式时,控制台仍然没有错误。只有当我第二次进入播放模式时,错误才会显示并一直存在,直到我重新启动 Unity。

我不知道如何改进代码以获得不会导致错误的正确 RuntimeTypeModel。构建 RuntimeTypeModel 的代码来自 对我的其他问题的回答。

编辑: 我没有使用以下几行,但这与问题无关:

//add unity types
typeModel.Add(typeof(Vector2), false).Add("x", "y");
typeModel.Add(typeof(Vector3), false).Add("x", "y", "z");

新的 RuntimeTypeModel 在 android 设备上运行没有问题。所以目前我决定在编辑器中使用简单的 #if #else 语句将模型从 MyProtoModel 更改为 RuntimeTypeModel.Default。

我在编辑器中没有遇到错误,我仍然可以在 android 上使用我的新模型。我对临时解决方案不满意,仍然希望得到更好的答案。