是否可以从不同的脚本文件 Unity C# 添加列表 <item> 值
Is that Possible To Add List<item> value from different Script File Unity C#
我有一个简单的问题。
我有两个文件脚本:
Player.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class player {
public List<item> itemx = new List<item> (); // Here
}
文件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 文件?
谢谢
注意
在你的问题中,你有
public class Player
而不是
public class Player:MonoBehaviour
我想这只是一个打字错误。如果你想拥有一个“免费”class 播放器(如在 OO 环境中),你不能那样做。
正确,这样做绝对有问题!
几件事...
请注意,在第二个脚本中它将是:
public player playerx; ... WRONG
public Player player; ... CORRECT
然后
player.items.Add( .. etc )
(别忘了你当然必须拖动连接“Player player”检查器变量。如果你不知道该怎么做,请说出来,我会给你一个 link 到一个教程。)
其次,第一个脚本有问题。
Unity 中有一个愚蠢的东西,其中“public”表示“检查器变量”
事实上你想要一个“普通的”public变量,就像在任何普通编程语言中一样,奇怪的是你必须输入这个
"[System.NonSerialized] public"
这只是关于 Unity 的那些奇怪的事情之一。事实上,在许多项目中,您从不使用检查器变量。所以你只要不停地在任何地方输入“[System.NonSerialized] public”。如果您明白我的意思,那么长的“[System.NonSerialized] public”是一种“正常”的。一直使用它。仅当您特别需要检查器变量时,才使用“public”。
public List<item> itemx... WRONG
[System.NonSerialized] public List<item> items... CORRECT
这个怎么样。假设数据库对象 returns [items] 或其他东西。
database = GameObject.FindGameObjectWithTag
("itemDatabase").GetComponent<itemDatabase> ();
//Generate the Slot and Slot Name;
forach(item _item in database.items)
{
playerx.itemx.add(_item);
}
如果你的数据库 returns 有什么不同你可以试试
playerx.itemx.add(new item
{
itemproperty1 = _item.property1,
and so on.
};
我有一个简单的问题。
我有两个文件脚本:
Player.cs
using UnityEngine; using System.Collections; using System.Collections.Generic; public class player { public List<item> itemx = new List<item> (); // Here }
文件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 文件?
谢谢
注意
在你的问题中,你有
public class Player
而不是
public class Player:MonoBehaviour
我想这只是一个打字错误。如果你想拥有一个“免费”class 播放器(如在 OO 环境中),你不能那样做。
正确,这样做绝对有问题!
几件事...
请注意,在第二个脚本中它将是:
public player playerx; ... WRONG
public Player player; ... CORRECT
然后
player.items.Add( .. etc )
(别忘了你当然必须拖动连接“Player player”检查器变量。如果你不知道该怎么做,请说出来,我会给你一个 link 到一个教程。)
其次,第一个脚本有问题。
Unity 中有一个愚蠢的东西,其中“public”表示“检查器变量”
事实上你想要一个“普通的”public变量,就像在任何普通编程语言中一样,奇怪的是你必须输入这个
"[System.NonSerialized] public"
这只是关于 Unity 的那些奇怪的事情之一。事实上,在许多项目中,您从不使用检查器变量。所以你只要不停地在任何地方输入“[System.NonSerialized] public”。如果您明白我的意思,那么长的“[System.NonSerialized] public”是一种“正常”的。一直使用它。仅当您特别需要检查器变量时,才使用“public”。
public List<item> itemx... WRONG
[System.NonSerialized] public List<item> items... CORRECT
这个怎么样。假设数据库对象 returns [items] 或其他东西。
database = GameObject.FindGameObjectWithTag
("itemDatabase").GetComponent<itemDatabase> ();
//Generate the Slot and Slot Name;
forach(item _item in database.items)
{
playerx.itemx.add(_item);
}
如果你的数据库 returns 有什么不同你可以试试
playerx.itemx.add(new item
{
itemproperty1 = _item.property1,
and so on.
};