Я только начал программировать в Unity и пока не очень хорош в этом.Я пытаюсь сделать простую игру для кликеров с использованием cookie, и смотрел этот урок , и примерно в 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);
}
}
Итак, я пытаюсь сейчас получить доступ к переменным count
и likesPerSecond
в этих 3 объектах и умножить их все вместе, используяцикл foreach.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить доступ к этим переменным из моего нового сценария, который в основном пытается сохранить все эти сценарии элементов в массиве (по крайней мере, я так думаю,видео пытается сделать), а затем умножить переменные вместе и получить сумму.
Я получаю следующие ошибки:
Невозможно неявно преобразовать UnityEngine.GameObject [] в ClicksPerSecondManager []
и
ClickerPerSecondManager [] не содержит определения для «count» и «LikesPersecond» (возможно, из-за того, что он не может получить доступ к сценарию на объекте)
Я сталкивался с подобной проблемой раньше в другом проекте, однако это был один объект, поэтому я использовал
public Playerhealth hp;
hp = gameObject.FindObjectWithTag("Player").getComponent<PlayerHealth>();
Однако на этот раз он долженхраниться в массиве, и я понятия не имею, как написать это.