0

我是如何到达这里的:我一直在研究一种工具,该工具使用具有子可编写脚本对象的可编写脚本对象。该系统运行良好,但是当我重命名 SO 时,Unity 中的父/子关系中断。

我现在已经设法将其归结为一个非常简单的案例研究。

使用下面的代码,您可以创建一个 Container SO 资产。然后使用 MyMenu 创建容器的子数据。所有这些都按预期工作,项目中的关系是:

容器 -> 数据

但是,一旦将 Container SO 重命名为其他名称,Unity 就会重新排序 Parent Child,以便 Data 现在是 Parent 而 Container 是 Child:

数据 -> 容器

以下是应该重复此问题的代码(Unity 2020.1.17f1 - 在 2020.1.8 上也有相同的结果)

容器.cs

using UnityEngine;

[CreateAssetMenu]
public class Container : ScriptableObject
{
}

数据.cs

using UnityEngine;

public class Data : ScriptableObject
{
}

自定义编辑器.cs

using UnityEditor;
using UnityEngine;

public class CustomEditor : Editor
{
    [MenuItem("MyMenu/Create Data for Container")]
    static void CreateDataForContainer()
    {
        Container container = Selection.activeObject as Container;
        if (container != null)
        {
            Data data = ScriptableObject.CreateInstance(typeof(Data)) as Data;
            data.name = data.GetType().Name;
            if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(container)))
            {
                AssetDatabase.AddObjectToAsset(data, container);
            }
            AssetDatabase.SaveAssets();
        }
    }
}

笔记

  • 起初我认为这是名称空间的问题,但事实并非如此
  • 认为这可能是一个装配问题,但现在基本类的情况并非如此
  • 关闭/打开项目结果相同
  • 重命名后资产文件相同

如果您遇到过这种情况,我很想知道我在这里做错了什么,我的工具几乎完成了,这阻止了我推出它。谢谢!

4

1 回答 1

1

Unity 端的错误修复:

统一错误

于 2020-12-23T21:37:33.193 回答