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