【问题标题】:GameObject creation order issue游戏对象创建顺序问题
【发布时间】:2014-03-16 02:34:02
【问题描述】:

我目前正在开发 Unity3D 中的库存系统,但遇到了一个奇怪的问题。我为我的库存系统创建了非 MonoBehaviour 类(以防万一),因此我有一个 Inventory 类,其中包含一个 Slot 对象列表,而后者又包含一个 Item 对象列表。

然后我在“HudInventoryPanel”中添加了一个组件脚本,名为“HudInventoryController”,如下所示:

using UnityEngine;
using System.Collections;

public class HudSlotController : MonoBehaviour {

    private InventoryController ic;

    // Use this for initialization
    void Start () {
        ic = GetComponent<InventoryController>();
    }

    // Update is called once per frame
    void Update () {
    }

}

但是,在 Start() 方法中,InventoryController(我的 Player 的一部分)尚未创建,在我看来,游戏对象是按字母顺序创建的......?

我应该如何处理这个问题?

【问题讨论】:

  • 我刚试了下,没有效果; HudSlotController 的 Start() 方法仍然在其他任何方法之前运行。

标签: c# unity3d


【解决方案1】:

您可以在项目设置中指定脚本执行顺序(编辑 -> 项目设置 -> 脚本执行顺序),这样可以确保您的脚本以正确的顺序执行。除此之外,您可以使用Awake() 方法,因为所有Awakes 都在任何Start() 方法之前执行。希望这些组合对您有所帮助!

【讨论】:

  • 好吧。并不真地。我可以看到 Awake() 在 Start() 之前运行,但创建的任何内容仍然不是“可访问的”,如下所示:gist.github.com/toreau/d4b88f5967353c3a388d
  • 由于 Unity3D/MonoDevelop(在我的 Mac 上)出现问题,我重新启动了整个过程。然后我可以看到 InventoryController,但看不到它实例化的 Inventory 对象。
【解决方案2】:

我通过在我的 InventoryController 脚本中创建一个中间变量以及创建一个“手动”getter 来解决这个问题; https://gist.github.com/toreau/f7110f0eb266c3c12f1b

不知道为什么我必须这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 2022-07-27
    • 1970-01-01
    相关资源
    最近更新 更多