C# 将脚本放入数组?
我刚刚开始在Unity中编程,但还不太擅长。 我试着做一个简单的饼干点击游戏,当时正在观看,大约18:34,他写下了一些代码,如下图所示。我认为他的代码已经过时,Unity也不像以前那样工作了(不过我不确定) 他的密码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
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
}