将游戏对象的变量存储到数组中 [Unity]
Storing variables of GameObjects into Array [Unity]
我有3种GameObject,分别是blueBook、redBook和greenBook。场景中有2本blueBook,7本redBook,4本greenBook
他们每个人都分配有以下具有 3 个属性的示例脚本。
public class blueBook : MonoBehaviour {
public string type = "BlueBook";
public string colour = "Blue";
public float weight;
float s;
void Start () {
float weightValue;
weightValue = Random.value;
weight = Mathf.RoundToInt (700*weightValue+300);
s=weight/1000; //s is scale ratio
transform.localScale += new Vector3(s,s,s);
}
// Update is called once per frame
void Update () {
}
}
在新的 class 中,我想获取游戏对象的所有变量(类型、颜色、重量)并将它们存储在一个数组中。如何做到这一点?
将它们全部存储到数组中后,用户将输入一个权重。然后另一个 class 将搜索所有信息以删除具有相同权重的数组和游戏对象(在场景中)。
谢谢。
更新
blueBook.cs
public class blueBook: MonoBehaviour {
public string type = "blueBook";
public string colour = "Red";
public float weight;
float s;
void Start () {
float weightValue;
weightValue = Random.value;
weight = Mathf.RoundToInt (500*weightValue+100);
s=weight/1000; //s is scale ratio
transform.localScale += new Vector3(s,s,s);
Debug.Log(weight);
}
// Update is called once per frame
void Update () {
}
}
block.cs
public class block: MonoBehaviour{
public List<GameObject> players;
void Start()
{ Debug.Log(players[1].GetComponent<blueBoook>().weight);
}
// Update is called once per frame
void Update () {
}
block.cs 的 debug.log 每次都显示 0,否则它会在 bluebook.cs 的 debug.log 中显示。是因为显示的是初始号吗?我不知道 wat 是错误的
对于一个列表中的所有块,您可以创建一个具有 public 列表的脚本,然后将所有游戏对象拖到检查器中的列表中。
using System.Collections.Generic;
public class ObjectHolder : MonoBehaviour
{
public List<GameObject> theBooks;
// You can remove by weight e.g. like this
public void DeleteByWeight(float inputWeight)
{
for(int i = theBooks.Count - 1; i >= 0; i--)
{
if(theBooks[i].GetComponent<Book>().weight == inputWeight)
Destroy(theBooks[i]);
theBooks.RemoveAt(i);
}
}
}
}
块上的脚本需要重命名为相同的名称(在我的示例中为Book
)。从您的代码来看,这没有问题,因为它们仅在成员的值上有所不同。
我有3种GameObject,分别是blueBook、redBook和greenBook。场景中有2本blueBook,7本redBook,4本greenBook
他们每个人都分配有以下具有 3 个属性的示例脚本。
public class blueBook : MonoBehaviour {
public string type = "BlueBook";
public string colour = "Blue";
public float weight;
float s;
void Start () {
float weightValue;
weightValue = Random.value;
weight = Mathf.RoundToInt (700*weightValue+300);
s=weight/1000; //s is scale ratio
transform.localScale += new Vector3(s,s,s);
}
// Update is called once per frame
void Update () {
}
}
在新的 class 中,我想获取游戏对象的所有变量(类型、颜色、重量)并将它们存储在一个数组中。如何做到这一点?
将它们全部存储到数组中后,用户将输入一个权重。然后另一个 class 将搜索所有信息以删除具有相同权重的数组和游戏对象(在场景中)。
谢谢。
更新
blueBook.cs
public class blueBook: MonoBehaviour {
public string type = "blueBook";
public string colour = "Red";
public float weight;
float s;
void Start () {
float weightValue;
weightValue = Random.value;
weight = Mathf.RoundToInt (500*weightValue+100);
s=weight/1000; //s is scale ratio
transform.localScale += new Vector3(s,s,s);
Debug.Log(weight);
}
// Update is called once per frame
void Update () {
}
}
block.cs
public class block: MonoBehaviour{
public List<GameObject> players;
void Start()
{ Debug.Log(players[1].GetComponent<blueBoook>().weight);
}
// Update is called once per frame
void Update () {
}
block.cs 的 debug.log 每次都显示 0,否则它会在 bluebook.cs 的 debug.log 中显示。是因为显示的是初始号吗?我不知道 wat 是错误的
对于一个列表中的所有块,您可以创建一个具有 public 列表的脚本,然后将所有游戏对象拖到检查器中的列表中。
using System.Collections.Generic;
public class ObjectHolder : MonoBehaviour
{
public List<GameObject> theBooks;
// You can remove by weight e.g. like this
public void DeleteByWeight(float inputWeight)
{
for(int i = theBooks.Count - 1; i >= 0; i--)
{
if(theBooks[i].GetComponent<Book>().weight == inputWeight)
Destroy(theBooks[i]);
theBooks.RemoveAt(i);
}
}
}
}
块上的脚本需要重命名为相同的名称(在我的示例中为Book
)。从您的代码来看,这没有问题,因为它们仅在成员的值上有所不同。