【问题标题】:GameObject.FindGameObjectWithTag returning (clone)?GameObject.FindGameObjectWithTag 返回(克隆)?
【发布时间】:2015-01-16 09:27:10
【问题描述】:

我有这个问题以及我使用的时候

GameObject.FindGameObjectWithTag("red");

它是在我向游戏对象添加动画组件时开始的

回归

red(Clone)

当游戏对象在层次结构中作为唯一带有“红色”标签的游戏​​对象时 它只发生在我添加动画组件之后,当我退出统一并重新启动统一时,问题就消失了,我得到的错误是

MissingComponentException:没有“Rigidbody2D”附加到“red(Clone)”游戏对象,但脚本正在尝试访问它。

场景中有红色不是红色(克隆),但我在检查器中看到当我使用 GameObject.FindGameObjectWithTag("red") 它发现红色(克隆)但没有红色(克隆)只是红色场景,它发生在我添加了一个动画组件并在我重新启动 Unity 时停止,它肯定是一个错误,只是想在这里检查 id

编辑 只是我说场景中有红色还有一个 RigidBody2d 附加到它,只是不存在红色(克隆),谢谢你的时间

【问题讨论】:

  • 你是否碰巧实例化了有问题的游戏对象?或者是否正在发生任何实例化?
  • 不,完全没有,场景中已经只有 1 个红色 GameObject,没有进行实例化

标签: unity3d tags gameobject animator


【解决方案1】:

这似乎是一个长期存在的统一错误,可以追溯到 4.3。希望将在统一 5 中修复

动画窗口似乎由于某种原因导致克隆,这是不可移除的。

目前只有两种方法可以绕过这个问题

  • 如果您还没有保存场景,请关闭动画窗口,关闭 unity 并重新启动 unity。这应该摆脱你的对象。

如果你已经保存了场景

  • 改用另一个标签,所以用 red 代替 red。

一般建议,只要 bug 正在运行,就尽量避免使用 FindGameObjectWithTag。因为不能保证稳定性。

处理此问题的其他一些不太理想的方法:

  • 在使用前找到并销毁克隆:

    GameObject[] remaining = GameObject.FindGameObjectsWithTag(Tags.player);
    foreach (GameObject clone in remaining) {
    if(clone.name == "Player_Aleysha(Clone)"){
          GameObject.Destroy(clone);
    }
    

【讨论】:

  • 谢谢,我知道这是一个错误,我只是担心它不会在编辑器和实际播放器中发生,谢谢
  • @MX D:你提交错误报告了吗?还是有人做过?我也有这个问题,但仍然无法一致地重现它以获得错误报告。如果您有复制案例,请提交(或分享,我会处理)。
  • @Heisenbug 没有人能够始终如一地重现该错误。所知道的是该对象是由 Animator 窗口引起的,该窗口似乎提供了一个并不总是正确删除的幽灵对象。由于该错误不一致,因此不在高优先级修复列表中。但是从 unity 5 开始会有新的动画师功能。希望修复了这个错误,或者使我们能够始终如一地重新创建它。
  • @MX D:是的动画窗口实际上创建并运行的实例应该被标记为 HideAndDontSave 所以实际上它不应该通过 FindGameObjectWithTag 进行搜索......在统一 5 中仍然没有发生..所以它可能已经修复或者由于某些原因不再发生。顺便说一句,如果你有这方面的消息,请告诉我
猜你喜欢
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多