C# 将脚本放入数组?

C# 将脚本放入数组?,c#,unity3d,C#,Unity3d,我刚刚开始在Unity中编程,但还不太擅长。 我试着做一个简单的饼干点击游戏,当时正在观看,大约18:34,他写下了一些代码,如下图所示。我认为他的代码已经过时,Unity也不像以前那样工作了(不过我不确定) 他的密码 public Text Gps; public Click click; public ItemManager[] items; public int getGoldPerSecond() { int tick=0; foreach(ItemManager ite

我刚刚开始在Unity中编程,但还不太擅长。 我试着做一个简单的饼干点击游戏,当时正在观看,大约18:34,他写下了一些代码,如下图所示。我认为他的代码已经过时,Unity也不像以前那样工作了(不过我不确定)

他的密码

public Text Gps;
public Click click;
public ItemManager[] items;
public int getGoldPerSecond()
{
    int tick=0;
    foreach(ItemManager item in items)
    {
        tick +=item.count * item.tickvalue;
    }
}
我的代码:

public Text LPS;
public MainButton mb; //same as his Click click script
public ClicksPerSecondManager[] cps;

// Use this for initialization
void Start () 
{
    cps = GameObject.FindGameObjectsWithTag("CPS");
}

public int getLikesPerSecond()
{
    int tick = 0;
    foreach(ClicksPerSecondManager item in cps)
    {
        tick += cps.count * cps.LikesPersecond;
    }
    return tick;
}
我知道代码不能访问变量或其他东西。 请有人给我解释一下如何将这些对象存储到数组中

这里发生的事情是,我有一个商店,它有3个项目。这是附加到3项的脚本

public Text itemDesc;
MainButton mainButton;
public float cost;
public int LikesPerSecond;
public int count;
public string itemName;
private float baseCost;
public GameObject sucessfulPurchase;
public GameObject failedPurchase;
public Image Panel;


// Use this for initialization
void Start () {
    baseCost = cost;
  mainButton = GameObject.FindGameObjectWithTag("Player").GetComponent<MainButton>();

}

// Update is called once per frame
void Update () {
    itemDesc.text =itemName+ "\nCost : "+cost+"\nLPS : "+LikesPerSecond   ;
}

public void purchasedItem()
{
    if (mainButton.noOfLikes >= this.cost)
    {
        mainButton.noOfLikes -= cost; //minus away cost
        count += 1;  
        cost = Mathf.Round(baseCost * Mathf.Pow(1.15f, count));
        sucessfulPurchase.gameObject.SetActive(true);
        StartCoroutine(WaitFor1Second());
    }
    else if (mainButton.noOfLikes < cost)
    {
        failedPurchase.gameObject.SetActive(true);
        StartCoroutine(WaitFor1Second());
    }
}

IEnumerator WaitFor1Second()
{
    yield return new WaitForSeconds(1);
    if (failedPurchase.activeSelf == true)
    {
        failedPurchase.SetActive(false);
    }
    else if (sucessfulPurchase.activeSelf == true)
    {
        sucessfulPurchase.gameObject.SetActive(false);
    }
}

但是这次它应该存储在一个数组中,我不知道如何编写它。

问题是
cps=GameObject.FindGameObjectsWithTag(“cps”)
返回一个
GameObject
数组,因此当您使用
ForEach
时,返回的每个对象都来自类型
GameObject
,因此您不能只使用
ForEach(cps中的ClicksPerSecondManager项)
,因为
cps
不包含
ClicksPerSecondManager
数组,它包含一组
游戏对象
,因此您可以这样做

foreach(GameObject item in cps){
    ClicksPerSecondManager cpsm = item.getComponent<ClicksPerSecondManager>(); 
    //now you have access to its public properties or methods
    Debug.log(cpsm.count);
    //etc
}
foreach(cps中的游戏对象项){
单击SperSecondManager cpsm=item.getComponent();
//现在您可以访问它的公共属性或方法
调试日志(cpsm.count);
//等
}

因此,您的问题主要在于:

您正确地迭代了一个数组,但是您再次引用了该数组的两个突出显示的部分,而不是数组中的单个项!注意,
item
在您的循环中完全没有使用


Milad Qasimi在
FindGameObjectsWithTag
返回
GameObjects
数组方面也是正确的,因此他的解决方案肯定会起作用。我只想指出存在的逻辑错误,因为您有一个格式正确的
foreach
声明,只是其中执行的操作格式不正确。

您从未告诉我们发生的具体错误。您试图存储哪些对象?你的代码根本没有表明这一点。我已经编辑了这篇文章。非常感谢您的帮助:)
foreach(GameObject item in cps){
    ClicksPerSecondManager cpsm = item.getComponent<ClicksPerSecondManager>(); 
    //now you have access to its public properties or methods
    Debug.log(cpsm.count);
    //etc
}