我目前正在 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 的一部分)尚未创建,在我看来游戏对象是按字母顺序创建的......?
我该如何处理这个问题?
您可以在项目设置中指定脚本执行顺序(编辑 -> 项目设置 -> 脚本执行顺序),因此使用它来确保您的脚本以正确的顺序执行。除此之外,您还可以使用
Awake()
方法,因为所有 Awake
都在任何 Start()
方法之前执行。希望这些组合可以帮助您!
我通过在我的 InventoryController 脚本中创建一个中间变量并创建一个“手动”getter 来解决这个问题; https://gist.github.com/toreau/f7110f0eb266c3c12f1b
不知道为什么我必须这样做,虽然。
很久以前有人问过这个问题,但如果有人也遇到这个问题,这里有一个提示: 您可以在“编辑”>“项目设置”>“脚本执行顺序”中配置脚本执行顺序。 只需添加您需要在“默认时间”之前首先执行的任何脚本。 Default 时间之前的所有内容都将在 Unity 加载之前执行,而您可以想象,之后的所有内容都将在 Unity 处理所有其他脚本之后执行。