我刚开始在Unity编程,但我还不太擅长。 我正在尝试制作一个简单的cookie Clicker游戏并且正在观看this tutorial并且在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);
}
}
所以我现在要做的就是在这3个对象中访问count
和likesPerSecond
的变量,并使用foreach循环将它们一起计时。
我面临的问题是我无法从我的新脚本访问这些变量,它基本上试图将所有这些项目脚本存储到一个数组中(至少这是我认为视频正在尝试做的事情)和然后将变量相乘并得到总和。
它给我的错误是:
无法将UnityEngine.GameObject []隐式转换为ClicksPerSecondManager []
和
ClickerPerSecondManager []不包含'count'和'LikesPersecond'的定义(可能导致它无法访问对象上的脚本)
我之前在另一个项目中遇到过类似的问题,但它只是一个对象所以我用了
public Playerhealth hp;
hp = gameObject.FindObjectWithTag("Player").getComponent<PlayerHealth>();
但是这次它应该存储在一个数组中,我不知道如何编写它。
答案 0 :(得分:1)
cps = GameObject.FindGameObjectsWithTag("CPS");
返回GameObject
数组,因此当您使用ForEach
时,返回的每个对象都来自类型GameObject
,因此您不能只使用foreach(ClicksPerSecondManager item in cps)
因为{{1}不包含cps
的数组,它包含ClicksPerSecondManager
的数组,所以你可以像这样做
GameObject
答案 1 :(得分:0)