#c# #unity3d
#c# #unity3d
Вопрос:
Я пытаюсь вызвать levelSystemAnimated.ExpSkip()
ее другим методом, так как я хочу использовать ее с помощью кнопки.
[SerializeField]
private LevelUI levelUI;
private LevelSystem levelSystem = new LevelSystem();
void Start() {
LevelSystemAnimated levelSystemAnimated = new LevelSystemAnimated(levelSystem);
if (File.Exists(Application.persistentDataPath "/data.save")) {
SaveData data = SaveSystem.LoadData();
levelSystemAnimated.AddLoadExp(data.exp);
levelSystemAnimated.SetLoadLevel(data.level);
levelSystem.SetLoadLevel(data.level);
levelSystem.AddLoadExp(data.exp);
}
levelSystem.AddExperience(0);
levelUI.SetLevelSystemAnimated(levelSystemAnimated);
levelUI.SetLevelSystem(levelSystem);
youCrashed.SetActive(false);
LoadPlusScore();
YouCrashed();
InvokeRepeating("AddPlusXP", 1.0f, 0.0f);
}
public void SkipExp() {
levelSystemAnimated.ExpSkip();
SkipExpButton.SetActive(false);
}
Вот мой код, не удалось этого сделать.
Обратите внимание, что я новичок.
Комментарии:
1. Итак? Напишите другой метод, который вызывает эту строку? Вы создаете ее только в start .. вне вашей локальной переменной не существует => вместо этого создайте поле в своем классе
private LevelSystemAnimated levelSystemAnimated;
и удалитеLevelSystemAnimated
из своегоStart
метода2. @derHugo Я знаю, что ты пытаешься сказать, но
LevelSystemAnimated
используюLevelSystem
, поэтому, если я это сделаю, я получуCS0236: A field initializer cannot reference the non-static field, method, or property
.3. Я сказал удалить
LevelSystemAnimated
объявление типа.. я не имел в виду не инициализировать поле вStart
.. вы все равно должны сохранить саму эту строку 😉4. @derHugo Большое вам спасибо, на самом деле очень помогло!
Ответ №1:
Я приведу вам пример со сценарием пустого игрового объекта, содержащего кнопку.
Во-первых, вам нужно получить доступ к скрипту, вы можете сделать это с помощью
public levelSystemAnimated levelSystem;
И перетащите GameObject скрипта внутрь инспектора, или вы можете
void Start()
{
GameObject levelSystem = GameObject.FindGameObjectWithTag("levelSystemObj");
//then you can easily access to the script with a GetComponent
}
В любом случае, теперь у вас будет доступ к скрипту, поэтому вы можете просто
public void ButtonToPress()
{
levelSystem.SkipExp();
}
Итак, в кнопку при нажатии вы помещаете функцию ButtonToPress()
, и когда вы нажимаете ее, она запускает эту функцию
Комментарии:
1. Спасибо за помощь, но levelSystemAnimated не является сценарием с одним поведением, поэтому его нельзя добавить ни в один GameObject, вот откуда возникла проблема.
2. вы можете получить к ней доступ с помощью общедоступной переменной и объекта, доступного для сценариев, есть много способов, это зависит от вашего проекта @Pupaak