Assets\Script\buyScript.cs(32,13): error CS0120: An object reference is required for the non-static field, method, or property 'moneyScript.gem' вот первый скрипт public void buy() { if (moneyScript.gem >= price && isPurchased = false) { PlayerPrefs.SetInt(ppname, 1); priceText.text = "Sold"; isPurchased = true; } else if(isPurchased == true) { StartCoroutine(select()); } }
IEnumerator select() { string lastText = priceText.text; moneyScript.selectedScin = scinNum; yield return new WaitForSeconds(0.5f); priceText.text = lastText; } вот второй using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
public class moneyScript : MonoBehaviour { public int gem; public static int selectedScin;
[SerializeField] public Text gemText;
// Start is called before the first frame update void Start() { gem = PlayerPrefs.GetInt("gem"); gemText.text = gem.ToString(); Debug.Log(selectedScin); } }
Это значит, что ты вызвал не static-метод через класс, а надо через объект. Ты сделал, например, так: SomeClass.SomeMethode(); А надо так: SomeClass obj = new SomeClass(); obj.SomeMethode();
я немного не понял что мне надо будет сделать в моём скрипте может объяснить на моем скрипте если можете
Максим
Искусственный Интеллект
(196689)
Дмитрий Светик, moneyScript это у тебя не объект, а класс. И почему-то с маленькой буквы. А как создаются объекты, я написал. Через new.
так вот я не понимаю что сделать та надо можешь просто написать как правильно
Максим
Искусственный Интеллект
(196689)
Дмитрий Светик, сделай moneyScript с большой буквы, чтобы было ясно, что это класс, а не локальная переменная.
Потом создай объект MoneyScript money = new MoneyScript();
Script вообще из имени желательно убрать, потому что он не несёт смысла.
Если объект должен сохранять данные, тогда создать его нужно на уровне класса вне метода наверху.
я конечно понимаю то что ты пишешь но не понимаю как это сделать я новичок
Максим
Искусственный Интеллект
(196689)
Дмитрий Светик, isPurchased == true так писать не надо. isPurchased уже либо true, либо false, поэтому просто if (isPurchased)
вот первый скрипт
public void buy()
{
if (moneyScript.gem >= price && isPurchased = false)
{
PlayerPrefs.SetInt(ppname, 1);
priceText.text = "Sold";
isPurchased = true;
}
else if(isPurchased == true) {
StartCoroutine(select());
}
}
IEnumerator select()
{
string lastText = priceText.text;
moneyScript.selectedScin = scinNum;
yield return new WaitForSeconds(0.5f);
priceText.text = lastText;
}
вот второй
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class moneyScript : MonoBehaviour
{
public int gem;
public static int selectedScin;
[SerializeField] public Text gemText;
// Start is called before the first frame update
void Start()
{
gem = PlayerPrefs.GetInt("gem");
gemText.text = gem.ToString();
Debug.Log(selectedScin);
}
}