как получить нестатический обьект в статическом методе?

116
03 апреля 2021, 04:10

есть два скрипта, в первом вызывается статический метод из второго скрипта, в этом методе нужно получить нестатический обьект. Знаю,что нестатик методы не имеют доступа к статикам, пробовал создать экземпляр, но все равно не получается(( сделать объект статическим не могу,он нужен в инспекторе. подскажите как выйти из ситуации? скрипт 1:

public class Z2placeComplete : MonoBehaviour
{
    public static bool isZ2Complete;
    public static Vector3 z2CompleteOffset = new Vector3(0.18f, 0.54f, 0);
    private void OnTriggerEnter2D(Collider2D other)
    {
        changeBrick.test(z2CompleteOffset, isZ2Complete);
    }
}

скрипт 2 (нет доступа к обьекту palka из-за его нестатичности):

public class changeBrick : MonoBehaviour
{
    public GameObject palka;
    public static void test(Vector3 completeOffset, bool isComplete)
    {
        if (isComplete)
        {
            changeBr(palka, completeOffset);
        }
    }
}

пробовал создать экземпляр класса внутри статик метода, в коде ошибок нет,но при запуске метода выдает ошибку " не задана ссылка на обьект" :

public static void test(Vector3 completeOffset, bool isComplete)
{
    if (isComplete)
    {
        changeBrick changeBrick = new changeBrick();
        changeBr(changeBrick.palka, completeOffset);
    }
}
Answer 1

можно передать нестатический объект в качестве параметра для статического метода

    public static void test(changeBrick nonStaticObject, Vector3 completeOffset, bool isComplete)
    {
        if (isComplete)
        {
            changeBr(nonStaticObject.palka, completeOffset);
        }
    }

если changeBr нестатический метод, его тоже следует вызывать у объекта

    public static void test(changeBrick nonStaticObject, Vector3 completeOffset, bool isComplete)
    {
        if (isComplete)
        {
            nonStaticObject.changeBr(nonStaticObject.palka, completeOffset);
        }
    }

если нет объекта, который надо передать в параметры test(), ищешь его на сцене через GameObject.Find("имя объекта на сцене")

READ ALSO
Как вывести последние три элемента модели из базы данных?

Как вывести последние три элемента модели из базы данных?

Проблема такая: есть модель "News" с параметрами "NewsId", "Title" и "Text"В представлении я вывожу эти новости:

125
Полнотекстовый поиск с выборкою с нескольких таблиц mysql?

Полнотекстовый поиск с выборкою с нескольких таблиц mysql?

Есть 3 таблицы post, files, tracker Делаю полнотекстовый поиск по post,теперь мне нужно узнать информацию о файле, LEFT JOIN files ,рабочий пример:

133
Проектирование БД. Хранение путей к файлам в одной таблице или в нескольких

Проектирование БД. Хранение путей к файлам в одной таблице или в нескольких

Собираю базу данныхЗадача найти оптимальное (наиболее производительное) решение модели базы

118
Смена значения даты по умолчанию в MySQL

Смена значения даты по умолчанию в MySQL

В MySQL таблице нужно сменить значение по умолчанию

102