Unity3D c#脚本:类变量数组数据问题

本文关键字:数组 数据 问题 类变量 脚本 Unity3D | 更新日期: 2023-09-27 17:52:58

我有一个简单的问题要问。只需检查下面的代码和问题是在最后的结果代码。我希望你们能帮助我。

文件inventory.cs

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class inventory : MonoBehaviour {
    public List<item> tmp = new List<item> ();
    public item itema;

    itemDatabase database;
    // Use this for initialization
    void Start () {
        int slotAmount = 0;
        database = GameObject.FindGameObjectWithTag ("itemDatabase").GetComponent<itemDatabase> ();
        //Generate the Slot and Slot Name;
        for(int i = 1; i <= 24; i++) {
                tmp.Add (new item());   
        }
        itema = database.items [0];
        tmp [0] = itema;
        tmp [0].itemStock = 1;
        Debug.Log (tmp[0].itemID + " - " + tmp[0].itemStock);
        itema = database.items [0];
        tmp [1] = itema;
        tmp [1].itemStock = 2;
        Debug.Log (tmp[1].itemID + " - " + tmp[1].itemStock);
        itema = database.items [0];
        tmp [2] = itema;
        tmp [2].itemStock = 3;
        Debug.Log (tmp[2].itemID + " - " + tmp[2].itemStock);
        Debug.Log (tmp[0].itemID + " - " + tmp[0].itemStock);
        Debug.Log (tmp[1].itemID + " - " + tmp[1].itemStock);

    }

}

,结果是:

tmp Array [0] : 1 Stock 1
tmp Array [1] : 1 Stock 2
tmp Array [2] : 1 Stock 3
tmp Array [0] : 1 Stock 3 // this array recently stock was 1 now replace with 3 Why it is replace i have use an array ?
tmp Array [1] : 1 Stock 3 // this array recently stock was 2 now replace with 3 Why it is replace i have use an array ?

问题是关于tmp Array[0]和tmp Array[1],它被tmp Array[2]取代。

谢谢丹尼斯

Unity3D c#脚本:类变量数组数据问题

这是因为在c#中itema = database.items [0];不会创建副本,而itema总是指向对象。所以发生的是,你并没有向数组中添加重复项而是所有的元素都指向相同的元素,也就是database.items[0]的值。这反过来又被修改。

我建议你创建一个新的类实例,像这样

设置数据库。Items

中的Items[0]值

itema = new items( database.items [0].name, database.items [0].ID, ....)

则赋值该项[0] =

请记住,在c#中,变量只是指向对象,当您尝试分配它时不会创建副本。