2

我希望这可能是我所缺少的一些简单的东西。

我有一个 ScriptableObject 脚本,如下所示:

using UnityEngine;
using System.Collections;

[CreateAssetMenu]
public class Item: ScriptableObject
{
    public string iname;
    public int iindex;
    public Sprite sprite;
    public GameObject itemObject;
    public int value;
    public string description;
    public itemType itemtype;

    public enum itemType
    {

        Consumable,
        Equippable,
    }

}

这在编辑器中效果很好,但如果我将任何引用 ScriptableObject 的脚本发布到 Android 或 Windows,它就不起作用。我错过了什么?

例如,下面的代码块似乎根本没有执行:

for (int i = 0; i < 3; i++)
{
    int lootnum = Random.Range(0, 4);


    slot1 = itemdb[lootnum];
    tlist[i] = itemdb[lootnum];
    slotlist[i].transform.GetChild(0).GetComponent<Image>().sprite = itemdb[lootnum].sprite;
    slotlist[i].transform.GetChild(0).GetComponent<Image>().enabled = true;
}

代码中的那些列表属于上述脚本中定义的 Item 类型。我不确定如何调试它,因为我在编辑器中没有收到错误或警告。

这是填充库存的脚本。那里有一些垃圾,但它在编辑器中运行良好。只是不在构建中。

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;

public class Inventory : MonoBehaviour {


    public int invSize;
    public Item slot1;
    public Item tslot1;
    public Item tslot2;
     public Item tslot3;
    public GameObject t1;
    public GameObject t2;
    public GameObject t3;
    public Sprite itemsprite;
    public List<Item> itemdb = new List<Item>();
    public List<Item> items = new List<Item>();
    public List<Item> tlist = new List<Item>();
    public Text stext;
    public Text description;
    public Item selectItem;
    public GameObject selectSlot;
    public Object test2;

    public List<GameObject> slotlist = new List<GameObject>();


    // Use this for initialization
    void Start () {


    }

    // Update is called once per frame
    void Update () {

    }

    public void addItem(Item itemToAdd)
    {
        //items.Add(itemdb[0]);
        for (int i = 0; i < 5; i++)
        {

            if (items[i] == null)
            {
                items[i] = itemToAdd;
                itemsprite = itemToAdd.sprite;

                return;
            }
        }
    }


    public void GenTreasure()
    {





        for (int i = 0; i < 3; i++)
        {
            int lootnum = Random.Range(0, 4);


            slot1 = itemdb[lootnum];
            tlist[i] = itemdb[lootnum];
            slotlist[i].transform.GetChild(0).GetComponent<Image>().sprite = itemdb[lootnum].sprite;
            slotlist[i].transform.GetChild(0).GetComponent<Image>().enabled = true;
        }

    }


    public void Uptext(int indexx)
    {
        stext.text = tlist[indexx].iname;
        selectItem = tlist[indexx];
        selectSlot = slotlist[indexx];
        description.text = selectItem.description;
    }

    public void Take(int index)
    {
        //items.Add(selectItem);
        for (int i = 0; i < invSize; i++)
        {

            if (items[i] == null)
            {
                items[i] = selectItem;
                //   itemsprite = itemToAdd.sprite;
                selectItem = null;
                //   tlist[i] = null;
                //    slotlist[i].transform.GetChild(0).GetComponent<Image>().sprite = null;
                selectSlot.transform.GetChild(0).GetComponent<Image>().enabled = false;

                return;
            }

        }

    }
}
4

1 回答 1

0

如果脚本不在场景中,它是如何加载的?是否使用资产包?如果是这种情况,那么该类可能会从构建中剥离。您可以在您的 link.xml 中包含该类以确保它被包含在内。另一种选择是在任何地方简单地引用包含场景中的脚本。

于 2017-02-22T13:36:09.260 回答