データ型のクラス変数に値を渡すのが簡単な質問と奇妙なことがあります。コードは以下のようなUnity with C#スクリプト:クラスデータ型クラスからデータを渡す奇妙な
:
void AddItem(int ID) {
for (int i = 0; i < database.items.Count; i++) {
if(database.items[i].itemID == ID) {
itemxs = new item (database.items [i].itemName,
database.items [i].itemID,
database.items [i].itemDesc,
database.items [i].harvest,
database.items [i].itemTime,
database.items [i].stdprice,
database.items [i].hightprice,
database.items [i].itemStock,
database.items [i].Lvlunlock,
database.items [i].rawTree,
database.items [i].itemType,
database.items [i].itemProd,
database.items [i].itemIcon);
Debug.Log ("Item Icon 1 : " + database.items[i].itemIcon); // This appear "Corps/Lemon"
Debug.Log ("Item Icon 2 : " + itemxs.itemIcon); // This appear "Corps/Lemon/Lemon" **even though I just passing value from code itemxs = new item (database.items [i].itemName,...etc)** it is wierd
CheckInventoryExist(itemxs);
break;
}
}
}
itemiconあるベース名から源:ベース名+ itemNameに。私は[i]が"隊/レモン" で同じ文字列まだそれ.itemicon database.itemsがDEBUG.LOGどこ database.items [i]は.itemicon含ま"隊/レモン" は問題があります、 しかし、私は"itemxs =新しいアイテム(database.items [i]の.itemName、....など"を入れた後、私はそれが"隊/レモン/レモン"
が含まれているitemxs.itemicon DEBUG.LOGとき何が起こっているのですか?
ありがとうございました
のデニス以下
クラスです:item.cs
using UnityEngine;
using System.Collections;
// Make Class Item
public class item {
public string itemName;
public int itemID;
public string itemDesc;
public string itemIcon;
public GameObject itemModel;
public int itemTime;
public int hightprice;
public int stdprice;
public int itemStock;
public int harvest;
public RawTree rawTree;
public ItemType itemType;
public ItemProd itemProd;
public int Lvlunlock;
private string baseName;
// Use this for initialization
void Start() {
}
// Update is called once per frame
void Update() {
}
void Awake() {
}
public enum ItemType {
Raw,
Admirable,
Valuable
}
public enum RawTree {
BigTree,
SmallTree,
Field,
None
}
public enum ItemProd {
AnimalBarm,
Mining,
Corps,
Dairy,
JuiceJamMaker,
Merchant,
Kitchen,
Bakery,
CraftHouse
}
public item (string name, int ID, string desc, int harvestx, int time, int stdpricex, int hightpricex, int stock, int Lvlunlockx, RawTree RawTree, ItemType type, ItemProd prod, string folder) {
itemName = name;
itemID = ID;
itemDesc = desc;
harvest = harvestx;
itemTime = time;
stdprice = stdpricex;
hightprice = hightpricex;
itemStock = stock;
Lvlunlock = Lvlunlockx;
rawTree = RawTree;
itemType = type;
itemProd = prod;
this.baseName = folder + "/";
itemIcon = this.baseName + itemName;
}
public item() {
}
}
その後、itemDatabase.cs私はこのコードを入れ
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class itemDatabase : MonoBehaviour {
public List<item> items = new List<item>();
// Use this for initialization
void Start() {
// Add Data To Item List With Class Item
// ------------------------------- Item Corps (Raw - Big Tree) ------------------------------- //
items.Add (new item ("Lemon", 1, "Honey Lemon", 9, 1020, 75, 158, 0, 1, item.RawTree.BigTree, item.ItemType.Raw, item.ItemProd.Corps, "Corps"));
}
// Update is called once per frame
void Update() {
}
}
:
itemxs = new item (database.items [i].itemName, // This contain "Lemon"
database.items [i].itemID,
database.items [i].itemDesc,
database.items [i].harvest,
database.items [i].itemTime,
database.items [i].stdprice,
database.items [i].hightprice,
database.items [i].itemStock,
database.items [i].Lvlunlock,
database.items [i].rawTree,
database.items [i].itemType,
database.items [i].itemProd,
database.items [i].itemIcon);
を
itemName contains: "Lemon";
ItemIConには、 "Corps /" + itemName; itemDatabase.csファイルでチェックすることができ、コンストラクタはitem.cs.にあります。
ので、結果はitemIconでなければなりません:itemxs.itemIconはダブルitemNameにを得たのはなぜ "隊/レモン" でも
?例えば: "兵士/レモン/レモン"。
this.baseName = folder + "/";
itemIcon = this.baseName + itemName;
どこfolder == Corps
とthis.baseName == "Corps/Lemon/"
とitemName == "Lemon"
ので、あなたが取得する必要があります正確に何を持っている:あなたはそれをやっているitem
コンストラクタで
をこの魔法のコンストラクタコードで何が起こっていただきました!あなたは言うことはできますか? –
私はクラスでコードを更新しました。あなたはそれを確認してください。 –
sidenote: 'item'クラスから' Start'、 'Awake'、' Update'を削除します。 'MonoBehaviour'から継承せず、そのために(または少なくとも同じことをやっていない)それらを持つことはできません。また、クラス名は常に大文字で始める必要があります。 –