Как уничтожить объект из статического метода в Unity C # - PullRequest
0 голосов
/ 21 октября 2018

Метод Destroy () недоступен в статическом методе

  public static void Die()   
    {
        Destroy(gameObject);
    }

Но Destroy () доступен только в том случае, если:

public void Die()
{
     Destroy(gameObject);
}

Ответы [ 3 ]

0 голосов
/ 21 октября 2018

Нельзя вызывать нестатическую функцию из статической функции, но вы можете сделать наоборот.

Мне нужно сделать его доступным для других сценариев

Сделать функцию Die функцией не static.Допустим, этот сценарий называется OtherScript.

public void Die()
{
     Destroy(gameObject);
}

. Затем из другого сценария вы можете получить к нему доступ, обнаружив, что GameObject, к которому присоединен сценарий OtherScript, с помощью функции GameObject.Find, а затем использоватьФункция GetComponent для получения ссылки OtherScript из GameObject:

OtherScript otherScript;

void Awake()
{
    GameObject obj = GameObject.Find("NameOfGameObjectOtherScriptIsAttachedTo");
    otherScript = obj.GetComponent<OtherScript>();
}

Теперь можно вызывать функцию Die с помощью otherScript.Die(). Обратите внимание, что вы должны заменить «NameOfGameObjectOtherScriptIsAttachedTo» на имя GameObject, к которому присоединен скрипт OtherScript.

0 голосов
/ 22 октября 2018

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

Я просто добавляю это, потому что ваш заголовок спрашивает How to Destroy Object from static method in Unity C#


Если вам действительно нужно, чтобы он был статическим (например, в статическом классе), вы могли бы использовать его следующим образом

using UnityEngine;

public static class SomeStaticClass
{
    public static void Die(GameObject obj)
    {
        Object.Destroy(obj);
    }
}

, но, честно говоря, это необходимо в очень немногих случаях.Это может быть полезно, например, в сценарии редактора, где у вас нет компонента, выполняющего ваш код.

0 голосов
/ 21 октября 2018

не может убить ни одного static объекта, это не работает таким образом.пожалуйста, обратитесь к ответу здесь.

следующий отрывок из вышеуказанной ссылки, и должен объяснить для вас ...

* Я думаю, возможно, вы неправильно понялиключевое слово static немного.

Чтобы уточнить немного ... Представьте, что у вас есть класс с именем Vehicle.

Нестатическая переменная означает, что у каждого транспортного средства естьсобственная копия этой переменной ».Мы могли бы сказать, что «каждый экземпляр транспортного средства имеет свою собственную копию переменной.

Статическая переменная означает« только 1 из этого значения совместно используется всеми транспортными средствами ».Здесь мы бы сказали: «Все экземпляры транспортного средства совместно используют переменную.

Исходя из этого, функции немного сложнее представить, но они работают во многом одинаково:

Нет-статическая функция действует на экземпляр автомобиля.В результате он может использовать оператор this (это имеет смысл!) И получать доступ как к нестатическим переменным-членам своего экземпляра, так и к общим статическим

Статическая функция не привязана киндивидуальный экземпляр транспортного средства, поэтому оператор «это» не имеет никакого смысла (что будет «это»?).По-прежнему имеет смысл иметь возможность доступа к статическим переменным, но опять же нестатические не имеют никакого смысла - на какую версию переменной она будет ссылаться?

Ваша функция 'Die' выглядиткак будто он предназначен для работы с данным экземпляром вашего врага.то есть вы ожидаете, что слово «умри» означает «убей этого, пожалуйста».В результате он не должен быть статичным.Вам также потребуется доступ к переменной gameObject, а не к типу GameObject. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...