C# Unity脚本导入设置定义默认变量值

C# Unity脚本导入设置定义默认变量值,c#,unity3d,C#,Unity3d,我不知道这个问题该怎么说。所以我会发布我的问题的截图 我该怎么做 [SerializeField]私有精灵[]m_精灵 到检查员那里来 我试过公共精灵[]精灵和私有精灵[]m_精灵也没有效果,我看到变量出现在那里,但现在我需要它,我似乎无法理解它。经过进一步的尝试,我发现一个公共精灵出现,但我要求它是一个精灵数组。我还尝试创建一个holder类并在其中定义数组,但它仍然没有出现。您有两个选项,要么创建一个游戏对象/预置,要么将脚本添加到其中,然后它就会出现 或者,如果它只是需要访问的数据对象,

我不知道这个问题该怎么说。所以我会发布我的问题的截图

我该怎么做

[SerializeField]私有精灵[]m_精灵

到检查员那里来


我试过公共精灵[]精灵
私有精灵[]m_精灵
也没有效果,我看到变量出现在那里,但现在我需要它,我似乎无法理解它。经过进一步的尝试,我发现一个
公共精灵出现,但我要求它是一个精灵数组。我还尝试创建一个holder类并在其中定义数组,但它仍然没有出现。

您有两个选项,要么创建一个游戏对象/预置,要么将脚本添加到其中,然后它就会出现

或者,如果它只是需要访问的数据对象,则可以将其设置为ScriptableObject并创建其实例


无论哪种方式,您都必须创建一个实例;您不能将变量分配给脚本,只能分配带有附加脚本的对象。

允许默认引用的唯一字段类型是从UnityEngine.Object派生的字段类型。

。。。
Sprite[]
是一个数组,不从
UnityEngine.Object
继承


如前所述,您可以使用包装器类,例如

// this attribute adds an entry to the Asset context menu Add->SpriteCotnainer
[CreateAssetMenu]
public class SpriteContainer : ScriptableObject
{
    public Sprite[] sprites;
}
然后在你的课堂上使用

[SerializeField] private SpriteContainer spriteContainer;
它现在的类型是
ScriptableObject
,它继承自
UnityEngine.Object
,因此它应该显示为默认的引用字段


因此,您需要通过右键单击
资产
&rightarrow<代码>添加&右箭头<代码>SpriteContainer。在这里你可以参考所有你需要的精灵。然后将其拖到脚本的
spriteContainer
字段中。

您的单例是从MonoBehavior或scriptableobject继承的,还是自定义类?当脚本位于项目文件检查器中时,是否有特定的原因使其出现?如果你把这个脚本附加到一个空的游戏对象上,它应该像你希望的那样出现……如果这个数组应该应用到所有的脚本实例上,为什么不使用ScriptableObject来保存它们呢?@Jake 1。它继承自MonoBehavior,当我了解到我无法按预期的方式使用它时,我希望它保留一些默认值,以防调用时场景中不存在它。(当我了解到它只在编辑模式下工作时)我不得不拼凑出一个wierd解决方案,在那里我创建了一个
TileSet:ScriptableObject
,我在TileManager中检查它是否为空,并从资源中调用默认值。这并不完全正确。OP询问您可以基于脚本/组件分配的默认引用。然后,这些默认参照将自动预先指定给编辑器中任何新添加的零部件。它仅适用于
Object
类型的引用(参见我的答案)