2017-02-21 5 views
1

Я надеюсь, что это может быть что-то просто, что мне не хватает.Сценарий объекта не работает на сборке

У меня есть сценарий 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; 
      } 

     } 

    } 
} 
+1

Что значит «не работает»? Это порождает ошибку, просто ли она не появляется? –

+0

Система инвентаризации отлично работает, если я нажму игру в редакторе. После построения слоты элементов не инициализируются или не назначаются спрайты и т. Д. Это похоже на то, что сценарий класса элемента не включен в сборку? Сценарий не находится в сцене, если это имеет значение – Mike

+0

. Я не думаю, что мы можем помочь только с этой информацией. Что вызывает код, который вы нам показали? Можете ли вы просто показать остальную часть класса? – Dunno

ответ

0

Если сценарий не находится на сцене, как он загружается? Использует ли он комплект активов? Если это так, то возможно, что класс удаляется из сборки. Вы можете включить класс в свой link.xml, чтобы убедиться, что он включен. Другой вариант - просто ссылаться на сценарий в включенной сцене где угодно.

Смежные вопросы