Не работает создание объекта из меню

90
14 мая 2021, 23:30

Пробую создать объект из меню:

GameObject obj;
void CreateObject() {
    obj = new GameObject("TEST");
}
[MenuItem("Test/Create new object")]
private static void CreateObjectMenuItem() {
    CreateObject();
}

Однако получаю ошибку: error CS0120: An object reference is required for the non-static field, method, or property 'Test.CreateObject()'

Подскажите пожалуйста, как решить эту проблему?

Answer 1

В ООП что бы использовать метод какого-то класса, должен существовать какой-то инициализированный экземпляр этого класса или метод должен быть статичным и использовать статичные поля.

Что касается Unity, в момент использования созданного Вами пункта меню "Test/Create new object" не гарантируется наличие экземпляра Вашего класса. Поэтому (учитывая приведенный код) и сам класс, и все в нем методы и поля должны быть с модификатором static.

Не зная, что должно еще происходить с созданным объектом, могу предолжить такой код:

using UnityEditor;
using UnityEngine;
public static class TestUtils
{
  private static GameObject obj;
  private static void CreateObject()
  {
    obj = new GameObject("TEST");
  }
  [MenuItem("Test/Create new object")]
  private static void CreateObjectMenuItem()
  {
    CreateObject();
  }
}

Это при условии, что нет необходимости неследования от MonoBehaviour

READ ALSO
Не работает шейдер

Не работает шейдер

Написал шейдер который должен делать эффект тумана в дали, но он не работаетВ чём может быть причина?

72
Как сосчитать ссылки на объект c#?

Как сосчитать ссылки на объект c#?

Мне необходимо подсчитать ссылки на объект, и если осталась только 1, то удалить егоДело в том, что все объекты хранятся в словаре:

171
Проблема с createmap <messaging.dto>

Проблема с createmap <messaging.dto>

в чем может быть проблема? Есть 2 таблицы ContractCity и ContractManagerЯ хочу промаппить в Messaging

114