[英]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.