如何将非monobehaviour脚本添加到脚本执行顺序

时间:2016-10-01 15:27:28

标签: c# unity3d unity5

因此,我正在尝试基于教程创建库存系统,并且在某些时候(特别是当我尝试将“项目”添加到列表中时,使用图标和每个人)我得到一个超出范围的错误。指定为了删除该错误,我必须为我当前使用的3个脚本设置特定的执行顺序。

问题是,其中一个脚本不是单一行为,虽然他只是将它添加到订单中,但我似乎无法做到这一点,而且我没有看到另一种消除错误的方法。

using UnityEngine;

using System.Collections;



[System.Serializable]

    public class Item {
    public string itemName;
    public int itemID;
    public string itemDesc;
    public Texture2D itemIcon;
    public int itemPower;
    public int itemSpeed;
    public ItemType itemType;

    public enum ItemType {
        Weapon,
        Consumable,
        Quest
    }

    public Item (string name, int id, string desc, int power, int speed, ItemType type)
    {
        itemName = name;
        itemID = id;
        itemDesc = desc;
        itemIcon = Resources.Load<Texture2D> ("Item Icons/"  + name);
        itemPower = power;
        itemSpeed = speed;
        itemType = type;
    }

}

我不知道他们是否是必要的,但这是另外两个脚本

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class ItemDatabase : MonoBehaviour {
    public List<Item> items = new List<Item> ();

    void Start ()
    {
        items.Add (new Item ("Rotten Apple",0,"Things can be seen moving under the surface of this putrid apple",2,0, Item.ItemType.Weapon));
    }
}


using UnityEngine;

using System.Collections;

using System.Collections.Generic;

public class Inventory : MonoBehaviour {
    public List<Item> inventory = new List<Item> ();
    public ItemDatabase database;

    // Use this for initialization
    void Start () {
        database = GameObject.FindGameObjectWithTag ("Item Database").GetComponent<ItemDatabase>();
        inventory.Add (database.items[0]);
        inventory.Add (database.items [1]);

    }

    void OnGUI ()
    {
        for (int i = 0; i < inventory.Count; i++)
        {
            GUI.Label (new Rect (10,i * 20, 200, 50), inventory[i].itemName);
        }
    }


}

1 个答案:

答案 0 :(得分:0)

非monobehaviour脚本的执行顺序取决于您从monobehaviours代码执行它们的顺序:)

在所有Awake()和Start()调用之前,初始化字段正在初始化。

似乎您只需要在Inventory之前设置ItemDatabase执行时间。并且数据库应该包含的项目不会少于您尝试提取的项目。