如何将非单一行为脚本添加到脚本执行顺序
How to add non-monobehaviour script to script execution order
所以我试图根据教程创建一个库存系统,并且在某些时候(特别是当我试图将 "items" 添加到列表时,带有图标和所有内容)我得到了一个超出范围的 error.The 教程指定,为了消除该错误,我必须为我当前使用的 3 个脚本设置特定的执行顺序。
问题是,其中一个脚本不是 monobehaviour ,虽然他只是将其添加到订单中,但我似乎做不到,而且我没有看到消除错误的另一种方法。
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;
}
}
我不知道他们是否有必要,但这是其他 2 个脚本
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);
}
}
}
非单一行为脚本的执行顺序取决于您从单一行为代码中执行它们的顺序:)
序列化字段在所有 Awake() 和 Start() 调用之前初始化。
看来你只需要将ItemDatabase的执行时间设置得早于Inventory即可。并且数据库包含的项目不应少于您尝试提取的项目。
所以我试图根据教程创建一个库存系统,并且在某些时候(特别是当我试图将 "items" 添加到列表时,带有图标和所有内容)我得到了一个超出范围的 error.The 教程指定,为了消除该错误,我必须为我当前使用的 3 个脚本设置特定的执行顺序。
问题是,其中一个脚本不是 monobehaviour ,虽然他只是将其添加到订单中,但我似乎做不到,而且我没有看到消除错误的另一种方法。
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;
}
}
我不知道他们是否有必要,但这是其他 2 个脚本
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);
}
}
}
非单一行为脚本的执行顺序取决于您从单一行为代码中执行它们的顺序:)
序列化字段在所有 Awake() 和 Start() 调用之前初始化。
看来你只需要将ItemDatabase的执行时间设置得早于Inventory即可。并且数据库包含的项目不应少于您尝试提取的项目。