Я надеюсь, что это может быть что-то просто, что мне не хватает.Сценарий объекта не работает на сборке
У меня есть сценарий 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,
}
}
Это прекрасно работает в редакторе, но если я публикую для Android или Windows, любой сценарий, который ссылается на ScriptableObject, он не работает. Что мне не хватает?
Например, следующий блок кода, кажется, не выполнять вообще:
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;
}
Эти списки в коде имеют тип элемента, определенного в вышеприведенном скрипте. Я не уверен, как отлаживать это, так как я не получаю никаких ошибок или предупреждений в редакторе.
Вот сценарий, который заполняет инвентарь. Там немного мусора, но он определенно отлично работает в редакторе. Просто не на сборке.
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;
}
}
}
}
Что значит «не работает»? Это порождает ошибку, просто ли она не появляется? –
Система инвентаризации отлично работает, если я нажму игру в редакторе. После построения слоты элементов не инициализируются или не назначаются спрайты и т. Д. Это похоже на то, что сценарий класса элемента не включен в сборку? Сценарий не находится в сцене, если это имеет значение – Mike
. Я не думаю, что мы можем помочь только с этой информацией. Что вызывает код, который вы нам показали? Можете ли вы просто показать остальную часть класса? – Dunno