2017-02-21 12 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に含めて、クラスが含まれていることを確認することができます。もう1つの選択肢は、含まれているシーン内のどこでもスクリプトを参照することです。

関連する問題