繁体   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