因此,我正在尝试基于教程创建库存系统,并且在某些时候(特别是当我尝试将“项目”添加到列表中时,使用图标和每个人)我得到一个超出范围的错误。指定为了删除该错误,我必须为我当前使用的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);
}
}
}
答案 0 :(得分:0)
非monobehaviour脚本的执行顺序取决于您从monobehaviours代码执行它们的顺序:)
在所有Awake()和Start()调用之前,初始化字段正在初始化。
似乎您只需要在Inventory之前设置ItemDatabase执行时间。并且数据库应该包含的项目不会少于您尝试提取的项目。