Может ли класс скриптовых объектов находиться внутри пространства имен в Unity3D?

#c# #unity3d

Вопрос:

Я реструктурирую свой код и создал пространство имен с намерением поместить в него все классы объектов, доступных для сценариев. (Я прилагаю код и скриншот ниже для организации.)

Когда я возвращаюсь в Юнити, все кажется прекрасным. Он также отображает опцию создания в меню. Но когда я проверяю объект, кажется, что к нему не прикреплен скрипт.

Некоторые люди показали, что Unity способна иметь более одного подобного в этом посте с форума Unity. Парень даже перечисляет то же поведение, что и мое в Деле № 4. Но я не могу понять, почему мой код не ведет себя так, как в его случае № 2. Я думаю , что это вызвано Attribute , но я не знаю, как отобразить опцию создания актива.. Кто-нибудь может мне помочь?

редактировать: Я попытался использовать класс редактора в качестве поста, но получил тот же результат.

 namespace BBMM.UI.ScriptableObjects
{
    [CreateAssetMenu(fileName = "New Size Preset", menuName = "BBMM/Size Preset")]
    public class SO_UI_SizePreset : ScriptableObject
    {
        public string presetName;
        public Vector2 realSize;
        public UnitType unit;
    }

    [CreateAssetMenu(fileName = "New Object", menuName = "BBMM/Object Container")]
    public class SO_UI_ObjectList_Item : ScriptableObject
    {
        public string objectName;
        public GameObject prefab;
    }
}
 

Вот ресурс, созданный с использованием приведенного выше кода:

подожди, что

Ответ №1:

Прежде всего убедитесь, что каждый класс находится в отдельном файле с соответствующим именем!

SO_UI_SizePreset.cs

 namespace BBMM.UI.ScriptableObjects
{
    [CreateAssetMenu(fileName = "New Size Preset", menuName = "BBMM/Size Preset")]
    public class SO_UI_SizePreset : ScriptableObject
    {
        public string presetName;
        public Vector2 realSize;
        public UnitType unit;
    }
}
 

SO_UI_ObjectList_Item.cs

 namespace BBMM.UI.ScriptableObjects
{
    [CreateAssetMenu(fileName = "New Object", menuName = "BBMM/Object Container")]
    public class SO_UI_ObjectList_Item : ScriptableObject
    {
        public string objectName;
        public GameObject prefab;
    }
}
 

Затем, если вы сначала создали ресурс SO, а затем изменили пространство имен, Unity может потерять соединение (в зависимости от того, как именно вы внесли это изменение).

-> вы можете либо воссоздать их, либо перейти в меню Инспектора в правом верхнем углу, включить > Debug режим и перетащить правильный сценарий в поле Сценарий.