微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可编写脚本的对象在重命名时重新排序父/子

如何解决可编写脚本的对象在重命名时重新排序父/子

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

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

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

容器 -> 数据

但是,一旦您将容器 SO 重命名为其他名称,Unity 会对父子项重新排序,以便数据现在是父项,而容器是子项:

数据 -> 容器

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

Container.cs

using UnityEngine;

[CreateAssetMenu]
public class Container : ScriptableObject
{
}

Data.cs

using UnityEngine;

public class Data : ScriptableObject
{
}

CustomEditor.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();
        }
    }
}

注意事项

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

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

解决方法

Unity 端的错误修复:

Unity Bug

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?