我不确定该问题该如何表达。所以我将发布问题的屏幕截图。
我该怎么做
[SerializeField] private Sprite[] m_Sprites;
显示在检查器中
我也尝试过public Sprite[] Sprites;
和private Sprite[] m_Sprites
,但都没有效果,我看到那里出现了变量,但是现在我似乎无法弄清楚是否需要它。经过进一步尝试后,我发现出现了public Sprite Sprite;
,但是我要求它是Sprite的数组。我还尝试过创建一个holder类并在其中定义数组,但它仍然没有出现。
答案 0 :(得分:1)
唯一允许默认引用的字段类型是从 UnityEngine.Object
... Sprite[]
是一个数组,并不继承于UnityEngine.Object
。
如前所述,您可以使用ScriptableObject
包装类,例如
// 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
,因此它应该显示为默认参考字段。
因此,您需要通过在Assets
→Add
→SpriteContainer
上单击右键单击来创建此资产。在这里,您可以引用所需的所有精灵。然后将其拖到脚本的spriteContainer
字段中。
答案 1 :(得分:0)
您有两个选择,要么创建一个游戏对象/预制件,向其添加脚本,然后它就会出现。
或者,如果它只是您需要访问的数据对象,则可以使其成为ScriptableObject并创建它的实例。
无论哪种方式,您都必须创建一个实例;您不能将变量分配给脚本,只能分配附加了脚本的对象。