簡體   English   中英

如何在Unity C#中從靜態方法銷毀對象

[英]How to Destroy Object from static method in Unity C#

在靜態方法中無法訪問Destroy()方法

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

但是只有在以下情況下才能訪問Destroy():

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

您不能從靜態函數中調用非靜態函數,但可以做相反的事情。

我需要使其在其他腳本上可訪問

將Die函數設為非static函數。 假設此腳本名為OtherScript

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

再從另一個腳本,您可以通過尋找游戲對象的訪問OtherScript腳本被附加到與GameObject.Find函數然后使用GetComponent函數來獲取OtherScript從游戲對象參考:

OtherScript otherScript;

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

現在,您可以使用otherScript.Die()調用Die函數。 請注意,您必須將“ NameOfGameObjectOtherScriptIsAttachedTo”替換為附有OtherScript腳本的OtherScript的名稱。

從您的評論看來,您似乎更想真正做到程序員的回答

我只添加此內容是因為您的標題詢問了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);
    }
}

但老實說,在極少數情況下需要這樣做。 例如,在沒有任何組件執行代碼的編輯器腳本中,這可能會有所幫助。

無法殺死單個static對象,它不會以這種方式工作。 請參考此處的答案

以下摘錄來自以上鏈接,應為您解釋...

*我認為您可能誤解了“靜態”關鍵字。

澄清一下,想象一下……您有一個名為“車輛”的類。

非靜態變量表示“每輛車都有此變量的副本”。 我們可能會說“車輛的每個實例都有其自己的變量副本。

靜態變量表示“所有車輛共享此值中只有1個”。 在這里,我們會說“所有車輛實例共享該變量。

隨后,函數很難描繪,但它們的工作方式大致相同:

非靜態功能在車輛實例上運行。 結果是它可以使用'this'運算符(這很有意義!)並訪問其實例的非靜態成員變量和共享的靜態成員變量

靜態功能並不與單個車輛實例相關,因此“ this”運算符沒有任何意義(“ this”將是什么?)。 能夠訪問靜態變量仍然很有意義,但是非靜態變量又沒有任何意義-它將指向誰的變量版本?

您的“骰子”功能看起來像是為對敵人的給定實例進行操作而設計的。 也就是說,您期望稱呼“ Die”為“請殺死這個”。 結果,它不應該是靜態的。 您還需要訪問“ gameObject”變量,而不是“ GameObject”類型。*

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM