【问题标题】:Unity Can I use yield return new WaitUntil(() => GameObject.Find("xx")) in IEnumerator Start()?Unity 我可以在 IEnumerator Start() 中使用 yield return new WaitUntil(() => GameObject.Find("xx")) 吗?
【发布时间】:2022-04-24 20:42:43
【问题描述】:

我想停止我的脚本中的代码,直到它找到一个游戏对象,然后继续。

我在 Start Method 中使用以下代码进行了尝试:

yield return new WaitUntil(() => GameObject.Find("Ball1"));

GameObject.Instantiate ...

但这不起作用(从不实例化我的游戏对象)

有谁知道我做错了什么或有其他想法?

【问题讨论】:

  • 每帧寻找一个游戏对象对性能非常不利。哪个脚本创建了你的球?我会使用property 来存储对您要查找的对象的引用。然后,实例化球的脚本将设置该属性的值。然后,在您的协程中,只需检查对对象的引用是否不为空。
  • 你的代码没问题。它应该等到在场景中找到 "Ball1" 对象。因此,如果您从另一个脚本实例化一个对象并将其重命名为 "Ball1",则该等待应该退出。在你说“它不起作用”之前,请在该行代码之前和之后使用Debug.Log,看看究竟是什么失败了。还要查看 Hierarchy 选项卡,确保有一个实际名为 "Ball1" 的 Object,它是 active。如果对象不活跃,GameObject.Find 找不到它。
  • 回答:“是的,但请不要。”

标签: c# unity3d


【解决方案1】:

首先你不应该使用 GameObject.Find 每一帧(这就是 WaitUntil 根据统一文档所做的) 其次,关于为什么它不起作用,如果找不到指定的游戏对象,GameObject.Find 返回 null,否则返回对游戏对象的引用。尝试为此返回 true 和 false ,它可能会起作用 所以

WaitUntil(() => GameObject.Find("name") != null)

【讨论】:

    猜你喜欢
    • 2019-06-19
    • 2023-03-21
    • 1970-01-01
    • 2018-11-09
    • 2016-06-15
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    相关资源
    最近更新 更多