【问题标题】:Destroying an object gives me an infinitive error loop销毁一个对象给了我一个不定式错误循环
【发布时间】:2016-04-01 18:13:56
【问题描述】:

我正在为学校制作一个基本游戏,但我被困住了。

在以下更新方法中(在敌人身上),我从我的 Player 对象上的 PlayerHealth 脚本中获取一个布尔值。

当我的生命值耗尽时,我会销毁游戏对象播放器。 正因为如此,我的更新方法(在一个敌人身上)不断循环,以寻找我已被破坏的 playerObject。

我不知道如何解决这个问题。我希望 if/else 语句会起作用,但它不起作用。

 void Update()
 {
     if (!GameObject.Find("Player").GetComponent <PlayerHealth>().deadPlayer) //false --> Chase
     {
         transform.position = Vector3.MoveTowards(transform.position, player.transform.position, chaseSpeed);  //move towards character
     } else
     {
         transform.position = transform.position;
     }
 }

一些额外的信息:

这是我遇到的错误

Object reference not set to an instance of an object

但我知道这是因为 playerObject 不再存在。双击时它会将我发送到

if (!GameObject.Find("Player").GetComponent <PlayerHealth>().deadPlayer) //false --> Chase

谁能帮帮我?

我将值更改为 true 的脚本:

if (currentHealth <= 0)
{
    deadPlayer = true;
    Destroy(gameObject);
}

【问题讨论】:

  • 您正在获取玩家对象,然后尝试访问他们的健康组件。如果你摧毁了玩家,那么你就无法获得无效的东西的健康成分。因此,在尝试访问他们的健康组件之前,您必须确保获得一个有效的玩家对象。

标签: c# unity3d


【解决方案1】:

你为什么不检查播放器是否存在? if (GameObject.Find("Player") != null)

如果您销毁一个对象,您将无法访问该对象上的组件。

【讨论】:

  • 谢谢!为什么我没有想到这一点:/
  • @MeindertStijfhals ye,不用担心。 Fwiw,我刚开始时犯了几次这个错误。
  • 我仍然经常犯这个错误。
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多