GameObject创建顺序问题

问题描述 投票:0回答:3

我目前正在 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 的一部分)尚未创建,在我看来游戏对象是按字母顺序创建的......?

我该如何处理这个问题?

c# unity3d
3个回答
2
投票

您可以在项目设置中指定脚本执行顺序(编辑 -> 项目设置 -> 脚本执行顺序),因此使用它来确保您的脚本以正确的顺序执行。除此之外,您还可以使用

Awake()
方法,因为所有
Awake
都在任何
Start()
方法之前执行。希望这些组合可以帮助您!


0
投票

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

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


0
投票

很久以前有人问过这个问题,但如果有人也遇到这个问题,这里有一个提示: 您可以在“编辑”>“项目设置”>“脚本执行顺序”中配置脚本执行顺序。 只需添加您需要在“默认时间”之前首先执行的任何脚本。 Default 时间之前的所有内容都将在 Unity 加载之前执行,而您可以想象,之后的所有内容都将在 Unity 处理所有其他脚本之后执行。

© www.soinside.com 2019 - 2024. All rights reserved.