【问题标题】:Unity How to check if Object does not existUnity如何检查Object是否不存在
【发布时间】:2014-11-25 06:30:17
【问题描述】:

好的,我的场景中有 2 个硬币,如果船触发硬币,硬币都称为“硬币”,通过调用销毁硬币

Destroy(this.gameObject);

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

所以当两个硬币都被摧毁时我必须硬币我希望着陆器处于活动状态。我已经做到了,并通过硬币脚本中的这段代码工作:

var landing : GameObject;

function OnTriggerEnter2D (other : Collider2D) {

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

        Debug.Log("Object exist");

    }else{

        landing.SetActive(true);

    }

}

结果是当我击中第一个硬币时硬币被破坏(这应该发生)但是当我击中下一个硬币时它会破坏但没有使着陆器处于活动状态所以我怎样才能让着陆器只有在没有硬币的情况下才处于活动状态存在于现场

【问题讨论】:

  • Coin 分配在哪里?我怀疑它可能指向您的预制件,该预制件将始终存在。您需要的是查看相关游戏对象的整个场景。所以,也许是GameObject.Find("Coin") - 但这样做的成本很高,所以如果你能避免的话,你不应该经常使用它。

标签: unity3d game-engine unityscript


【解决方案1】:

我尽我所能编辑了这个问题,以便它可以工作,但要保持尽可能简单,就像你试图保持它一样。因为我现在正在工作,所以我没有测试过它。如果没记错的话,我认为它应该从我的头顶开始工作。让我知道。

此外,如果我要为一般用途执行此操作,我将创建一个“硬币监视器游戏对象”,并将填充一个数组或更好的硬币列表,并告诉经理减去硬币,直到满足最终条件.然后它将适用于 N 个硬币。

另一种方法是标记硬币,然后在你的游戏对象的 start() 处查找游戏对象,但如果是我,我仍然更喜欢管理器解决方案,它更强大、更灵活,因为你可以扩展它制作一堆与游戏中的硬币相关的其他东西。


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

// 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 );
      }
    } 
  
}

【讨论】:

  • 仍然着陆器永远不会成为现实
  • 我有 2 个硬币共享相同的脚本和相同的名称。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2011-12-14
    • 2016-01-24
    • 2013-05-15
    相关资源
    最近更新 更多