我有一个简单的问题。
我有两个文件脚本:
Player.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class player {
public List<item> itemx = new List<item> (); // Here
}
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
}
}
}
正如您在player.cs文件中看到的,我已经声明了一个列表变量:
public List<item> itemx = new List<item> (); // Here
并在Inventory.cs文件中我想使用:
添加值playerx.itemx.Add(new item()); And Here
可以将值变量保存到player.cs文件吗?
谢谢
答案 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;像任何普通编程语言一样的公共变量,奇怪的是你必须输入这个
它只是关于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.
};