将游戏对象的变量存储到数组中 [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)。从您的代码来看,这没有问题,因为它们仅在成员的值上有所不同。