我是如何到达这里的:我一直在研究一种工具,该工具使用具有子可编写脚本对象的可编写脚本对象。该系统运行良好,但是当我重命名 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();
}
}
}
笔记
- 起初我认为这是名称空间的问题,但事实并非如此
- 认为这可能是一个装配问题,但现在基本类的情况并非如此
- 关闭/打开项目结果相同
- 重命名后资产文件相同
如果您遇到过这种情况,我很想知道我在这里做错了什么,我的工具几乎完成了,这阻止了我推出它。谢谢!