是否可以从不同的脚本文件Unity C#添加列表<item>值

时间:2016-06-30 15:06:33

标签: c# list class unity3d unityscript

我有一个简单的问题。

我有两个文件脚本:

  1. Player.cs

    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
    
    public class player {
        public List<item> itemx = new List<item> (); // Here
    
    
    }
    
  2. File Inventory.cs

            using UnityEngine;
            using System.Collections;
            using System.Collections.Generic;
            using UnityEngine.UI;
    
            public class inventory : MonoBehaviour {
                public player playerx;
    
                itemDatabase database;
    
                // Use this for initialization
                void Start () {
    
                    database = GameObject.FindGameObjectWithTag ("itemDatabase").GetComponent<itemDatabase> ();
                    //Generate the Slot and Slot Name;
                    for(int i = 1; i <= 24; i++) {
                        playerx.itemx.Add(new item()); // Here
    
                        playerx.itemx[i] = database.items[i]; // And Here
    
                    }
                }
            }
    
  3. 正如您在player.cs文件中看到的,我已经声明了一个列表变量:

    public List<item> itemx = new List<item> (); // Here
    

    并在Inventory.cs文件中我想使用:

    添加值
    playerx.itemx.Add(new item()); And Here
    

    可以将值变量保存到player.cs文件吗?

    谢谢

2 个答案:

答案 0 :(得分:2)

在你的问题中,你有

   public class Player

而不是

   public class Player:MonoBehaviour

我认为这只是一个错字。如果你想要一个免费的&#34; class Player(在OO环境中),你不能这样做。

正确,这样做绝对存在问题!

有几件事......

请注意,在第二个脚本中,它将是:

 public player playerx; ... WRONG

 public Player player; ... CORRECT

然后只是

player.items.Add( .. etc )

(别忘了当然你必须拖动以连接&#34;播放器播放器&#34;督察变量。如果你不知道如何这样做,我会给你一个链接教程。)

其次,在第一个脚本中你遇到了问题。

Unity中有一个愚蠢的事情,那就是&#34;公共&#34;意味着&#34;督察变量&#34;

事实上,你想要一个普通的&#34;像任何普通编程语言一样的公共变量,奇怪的是你必须输入这个

&#34; [System.NonSerialized] public&#34;

它只是关于Unity的一些奇怪的事情。事实上,在许多项目中,您从不使用检查器变量。所以你只需要不断输入&#34; [System.NonSerialized] public&#34;到处。长的&#34; [System.NonSerialized] public&#34;是一种正常的&#34;一个,如果你明白我的意思。一直使用它。只有当您特别需要检查器变量时,才能使用&#34; public&#34;。

  public List<item> itemx...   WRONG

  [System.NonSerialized] public List<item> items...   CORRECT

答案 1 :(得分:0)

这个怎么样?假设数据库对象返回[items]或其他东西。

                database = GameObject.FindGameObjectWithTag 

("itemDatabase").GetComponent<itemDatabase> ();
                    //Generate the Slot and Slot Name;
                    forach(item _item in database.items)
    {
 playerx.itemx.add(_item);
}

如果您的数据库返回不同的内容,您可以尝试

playerx.itemx.add(new item
{
itemproperty1 = _item.property1, 
and so on.
};