【问题标题】:ScriptableObject, added a field, Assets not updating, how to?ScriptableObject,添加了一个字段,资产不更新,怎么办?
【发布时间】:2021-03-31 16:26:38
【问题描述】:

ScriptableObject 类中新添加的字段未放入其类型的资产中。这与 Scriptable Objects 的工作方式有关吗?有没有办法在不丢失已填充字段中的现有信息的情况下更新可编写脚本的对象资产?

我的 ScriptableObject 类有一堆动画字符串:

public class SO_AnimStringNames : ScriptableObject {
public string FirstAnim;
public string SecondAnim;
public string ThirdAnim;
}

我通过这个类创建了一个 ScriptableObject 资产,并将名称添加到字符串中,并将其用作另一个对象类型中的数据,该对象类型使用这些字符串。

刚才,在 ScriptableObject 类中添加了第四个字符串,所以现在看起来像这样:

public class SO_AnimStringNames : ScriptableObject {
public string FirstAnim;
public string SecondAnim;
public string ThirdAnim;
public string FourthAnim; // newly added field
}

但在 ScriptableObject 资产中没有看到/更新它,并且没有明显的方法来更新此资产。

这是 ScriptableObjects 的限制,还是其他问题?

【问题讨论】:

  • 应该发生......任何会阻碍 Unity 重新编译的编译器错误?您究竟是如何创建资产的? (我想这不是完整的代码?)
  • 这就是问题所在!我在另一个文件中添加了一些东西,一个新的抽象方法,并且没有级联所有需要的覆盖。错过了两个,不再想它了,做其他事情。
  • 谢谢你,@derHugo,感觉就像一个正确的布偶。

标签: unity3d serialization scriptable-object


【解决方案1】:

我对你的问题有点困惑,所以...

选项 1: 我刚刚尝试了您所做的,但我在您的课程顶部添加了 CreateAssetMenu 属性,有人提到您可能没有共享您的所有代码,但理论上它应该是这样的:

[CreateAssetMenu(fileName ="NewAnimStringNames",menuName ="Animation Names")]
public class SO_AnimStringNames : ScriptableObject
{
    // made an instance with these three first
    public string FirstAnim;
    public string SecondAnim;
    public string ThirdAnim;
    // then added the fourth variable, the instance I created previously updates correctly 
    //and keeps the values I set on the other three
    public string FourthAnim;
}

这就是您的ScriptableObject 的实际外观吗?您是从 Assets/Create 菜单中创建它们还是右键单击您的 assets 并添加创建菜单?

选项 2: 他们还提到,也许您还有另一个问题是不允许 Unity 重新编译导致您的 ScriptableObject 使用新字段更新自身?请检查控制台是否有任何其他问题。

【讨论】:

  • 是选项 2!
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-27
  • 2015-02-11
相关资源
最近更新 更多