C# 与C脚本的统一:类数据类型使用数据从类传递值
我遇到了一个简单而奇怪的问题,将值传递给数据类型类变量 代码如下所示:C# 与C脚本的统一:类数据类型使用数据从类传递值,c#,class,variables,unity3d,unityscript,C#,Class,Variables,Unity3d,Unityscript,我遇到了一个简单而奇怪的问题,将值传递给数据类型类变量 代码如下所示: 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,
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;
}
}
}
然后是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 () {
}
}
项目名称包含:柠檬
项目图标包含:军团/+项目名称;您可以在itemDatabase.cs文件中检查它,构造函数位于item.cs
因此结果itemIcon必须是:Corps/Lemon但是
为什么itemxs.itemIcon得到了双itemName?例如:Corps/Lemon/Lemon。在项目构造函数中,您正在执行以下操作:
this.baseName = folder + "/";
itemIcon = this.baseName + itemName;
其中folder==Corps和this.baseName==Corps/Lemon/和itemName==Lemon,这样您就得到了应该得到的内容。在构造函数中:
this.baseName = folder + "/"; // if folder = "Corps/Lemon" from database.items[i].itemIcon
itemIcon = this.baseName + itemName; // it will update itemIcon to "Corps/Lemon" + "/" + "Lemon"
你现在明白了吗
您可能希望直接分配itemIcon值,而不是执行所有这些操作
在构造函数中执行此操作:
itemIcon = folder;
干杯你能告诉我这个神奇的构造函数代码中发生了什么吗?我已经用类更新了代码。。您能检查一下吗?作为旁注:从您的item类中删除Start、Wake和Update。它不是从单一行为中继承的,因此不能拥有它们,或者至少它们没有这样做。此外,类名应始终以大写字母开头。在itemDatabase中:items。添加新的item Lemon、1、Honey Lemon、9、1020、75、158、0、1、item.RawTree.BigTree、item.ItemType.Raw、item.ItemProd.Corps、Corps。。。。。。。参数的末尾我只有输入。因此,this.baseName=folder=Corps/不带lemon。我尝试删除itemName;但是itemIcon只包含Corps/。问题是什么?在itemDatabase中:items。添加新的item Lemon,1,Honey Lemon,9,1020,75,158,0,1,item.RawTree.BigTree,item.ItemType.Raw,item.ItemProd.Corps,Corps。。。。。。。参数的末尾我只有输入。因此,this.baseName=folder=Corps/不带lemon。我尝试删除itemName;但是itemIcon只包含Corps/。问题出在哪里?源于原始代码:database.items[i].itemcon//This Contain Corps/Lemon;您正在传递的是itemIcon,而不是字符串Corps。请查看上面的这一行:Debug.Log database.items[i].itemIcon;//调试时,此文件仍包含Corps/Lemon Debug.Log itemxs.itemcon;//调试时,此文件将变为contain Corps/Lemon/Lemon。如果您将itemIcon作为文件夹名传递,这正是您应该期望的。这是准确的行为,因为代码本身没有大脑。这肯定是一个逻辑错误。@DennisLiu如果你不能理解基本的编程逻辑,你不需要否决我的答案。阅读他人代码和回答问题需要时间,因此至少感谢我的帮助:
this.baseName = folder + "/"; // if folder = "Corps/Lemon" from database.items[i].itemIcon
itemIcon = this.baseName + itemName; // it will update itemIcon to "Corps/Lemon" + "/" + "Lemon"
itemIcon = folder;