Warning:You are trying to create a MonoBehaviour using the 'new' keyword

257
02 октября 2021, 19:30

Постоянно вываливается предупреждение:

You are trying to create a MonoBehaviour using the 'new' keyword.  This is not allowed.  MonoBehaviours can only be added using AddComponent(). Alternatively, your script can inherit from ScriptableObject or no base class at all
UnityEngine.MonoBehaviour:.ctor()
ObjectDataBase:.ctor()

Это из-за этих строк в коде :

ODBtemp = new ObjectDataBase();

Полностью код:

...
public class PlacementObjects : EditorWindow
{
    ObjectDataBase ODBtemp = new ObjectDataBase();
    ...
    void OnEnable()
    {
        ...
        ODBtemp = new ObjectDataBase();
        ...
    }
    void OnGUI()
    {
        EditorGUI.BeginChangeCheck();
        string[] tabs = { "Объекты", "Назначение/Просмотр DATA у Terrain", "TAB THREE" };
        //selectedTab = GUILayout.Toolbar(selectedTab, tabs, tabStyle);
        selectedTab = GUILayout.Toolbar(selectedTab, tabs);
        switch (selectedTab)
        {
            case 0:
                DrawLayouts();
                DrawHeader();
                DrawLeft();
                DrawRight();
                DrawFooter();
                break;
            case 1:
                DrawListTerrain();
                break;
            case 2:
                GUILayout.Label("TAB THREE");
                break;
        }
        EditorGUI.EndChangeCheck();
    }
    void SetGamObjArrayPrefab(int Objint)
    {
        ODBtemp = new ObjectDataBase();
        ...
    }
    void InitOnGUI()
    {
        ODBtemp = new ObjectDataBase();
        ...
    }
    void DrawHeader()
    {
        ODBtemp = new ObjectDataBase();
        ...
    }
    void SaveInBDObj(string stringupdate)
    {
        ODBtemp = new ObjectDataBase();
        ...
    }
    ...
}

Как лучше переписать код , чтоб предупреждения не было?

Answer 1

Судя по всему, Ваш класс ObjectDataBase наследуется от MonoBehaviour. А корректно создавать новые экземпляры компонентов можно только методом AddComponent.

Отсюда два решения:

1. Создавать ObjectDataBase в каком-нибудь объекте-контейнере

ODBtemp = gameObjectParent.AddComponent<ObjectDataBase>();

2. Переписать класс ObjectDataBase без наследования от MonoBehaviour

<...>

READ ALSO
Алгоритм сортировки слиянием(C#)

Алгоритм сортировки слиянием(C#)

Отсмотрел я значит вот такую лекцию по этому Алгоритму(на питоне правда но как я понял сути дела не меняет по крайней мере для функции слияния...

167
Random.NextDouble и Random.Next не работают

Random.NextDouble и Random.Next не работают

Тут ошибку пишет: Ошибка CS1061 "Random" не содержит определения "Next", и не удалось найти доступный метод расширения "Next", принимающий тип "Random" в качестве...

98
Перенос данных(переменных) из C# в HTML

Перенос данных(переменных) из C# в HTML

Есть шаблон отчета на языке HTML и создана программа для расчетов на языке C#Нужно что бы значения из программы перетащить в шаблон HTML не знаю...

86
GUILayout.Button , как сделать активной-неактивной в EditorWindow?

GUILayout.Button , как сделать активной-неактивной в EditorWindow?

Есть кнопка GUILayoutButton("Обработать json, разместив объекты на карте") в окне EditorWindow

165