Unity如何检查Object是否不存在

时间:2014-09-30 15:00:57

标签: unity3d game-engine unityscript

好的,我的场景中有2个硬币,他们两个都称为"硬币"如果船通过调用

触发硬币销毁硬币
Destroy(this.gameObject);

我还有一个未激活的着陆器(通过取消选中检查器中对象名称旁边的复选标记)

所以当硬币被摧毁时我必须要硬币我希望着陆器处于活动状态。我已经完成了这项工作,并在硬币脚本中使用此代码:

var landing : GameObject;

function OnTriggerEnter2D (other : Collider2D) {

    Destroy(this.gameObject);
    if(Coin){

        Debug.Log("Object exist");

    }else{

        landing.SetActive(true);

    }

}
我得到的结果就是当我击中第一枚硬币时硬币会被破坏(那应该发生什么)但是当我击中下一枚硬币时它会摧毁而不会使着陆器处于活动状态,所以如果没有硬币,怎样才能使着陆器处于活动状态存在于现场

2 个答案:

答案 0 :(得分:1)

我尽可能地编辑了这个问题所以它可以工作,但保持简单,显然你正试图保持它。我没有测试过,因为我现在正在工作。如果没有弄错的话,我认为它应该从我的头脑中起作用。让我知道。

另外,如果我这样做是为了通用,我会制作一个“硬币监视器”游戏对象'并将填充数组或更好的硬币列表,并告诉经理减去硬币,直到满足最终条件。然后它将适用于N个硬币。

另一种方法可能是标记硬币,然后在gameObject的start()处进行游戏对象查找,但如果是我,我仍然会更喜欢管理器解决方案,并且更加强大和灵活,因为您可以扩展它制作一堆与你游戏中的硬币相关的额外内容。


这是因为你在激活landing.SetActive()之前销毁()硬币,只需将线条Destroy()移到最后,在if(硬币)结束之后,它应该修复它。



// Coin gameObject script - This sample code requires that you Tag your Ship gameObject: "Ship"

// Note this is not too efficient as you have to assign trough the Inspector!
public var landing : GameObject;
public var myOtherCoin : GameObject;

function OnTriggerEnter2D (other : Collider2D) {

    if ( other.tag == "Ship" )
    {
      if ( myOtherCoin != null )
      {
        Debug.Log( "There's still another coin, Self destructing..." );
        Destroy( this.gameObject );
      }
      else
      {
        Debug.Log( "There's no other coins.. Activating Landing!" );
        landing.SetActive( true );
        Debug.Log( "Landing Active... Self destructing now!" );
        Destroy( this.gameObject );
      }
    } 
  
}




答案 1 :(得分:0)

如果我是你,我会在场景中创建另一个GameObject,一个各种仲裁者,其中包含一个包含现有硬币数量的脚本(开头为2个)和一个递减此计数器的方法。 然后,在销毁你的硬币之前,你会在仲裁器中调用这种方法。此外,在减量方法中,您可以检查硬币的数量,如果您刚刚将它减少到0,则自动激活着陆垫。它定期检查整个场景中的硬币肯定便宜了。