Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Где тут ошибка в коде?

Артем ЭЭЭЭ Ученик (87), на голосовании 7 месяцев назад
писал код чтобы были достижения, а когда набираешь нужное количество очков оно не выполняется, что делать?
код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class AchMenu : MonoBehaviour
{
public int money;
public int total_money;
[SerializeField] Button firstAch;
[SerializeField] bool isFirst;
void Start()
{
money = PlayerPrefs.GetInt("money");
total_money = PlayerPrefs.GetInt("total_money");
isFirst = PlayerPrefs.GetInt("isFirst") == 1 ? true : false;

if (total_money <= 10 && !isFirst)
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
StartCoroutine(IdleFarm());
}

}


public void GetFirst()
{
int money = PlayerPrefs.GetInt("money");
money += 10;
PlayerPrefs.SetInt("money", money);
isFirst = true;
PlayerPrefs.SetInt("IsFirst+", isFirst ? 1 : 0);
}

IEnumerator IdleFarm()
{
yield return new WaitForSeconds(1);
money++;
Debug.Log(money);
PlayerPrefs.SetInt("money", money);
StartCoroutine(IdleFarm());
}

public void ToMenu()
{
SceneManager.LoadScene(0);
}
void Update()
{

}
}
Голосование за лучший ответ
Лев Перфилов Просветленный (26080) 8 месяцев назад
А так должно быть, что метод GetFirst() ничем не вызывается?
Артем ЭЭЭЭУченик (87) 8 месяцев назад
незнаю, как смотрел в ютубе так и написал
Александр Рогачёв Знаток (479) 8 месяцев назад
Не вижу тут никаких достижений.
Начни изучать программирования с нуля, а не дёргать куски кода с Ютюб
Артем ЭЭЭЭУченик (87) 8 месяцев назад
я смотрю уроки, как там было написнао так и написал
Александр Рогачёв Знаток (479) Артем ЭЭЭЭ, понятно. Тогда, если есть возможность, задай вопрос создателям уроков, либо кто тоже их проходит. Т.к. по этой части кода ничего не понятно. В крайнем случае потом создай новый вопрос, но приведи больше информации, желательно с указанием источника - откуда взялся этот код.
Татьяна Просветленный (36384) 8 месяцев назад
В коде нет ошибки, но функция GetFirst() не выполняется. Это происходит потому, что в методе Start() выполняется проверка, которая определяет, может ли игрок получить достижение. Если условие не выполнено, то функция GetFirst() не вызывается.
Чтобы решить эту проблему, вам нужно изменить условие в методе Start(). Вместо проверки на условие total_money <= 10, вам нужно проверить, достиг ли игрок необходимое количество очков для получения достижения.
Например, вы можете изменить условие на:
 if (total_money >= 10 && !isFirst) 
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
StartCoroutine(IdleFarm());
}
Это изменение условия поможет вызывать функцию GetFirst() и получать достижение, когда игрок накопит необходимое количество очков.
Андрей Панарин Искусственный Интеллект (249382) 8 месяцев назад
 int money = PlayerPrefs.GetInt("money");  
money += 10;
PlayerPrefs.SetInt("money", money);
Здесь значение денег переписывается в настройках, но при этом не меняется значение поля money (здесь объявлена локальная переменная).
Так и задумано?
ОракулОракул (62095) 8 месяцев назад
Так скопипастено с ютуба)
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (264319) 8 месяцев назад
рефактор. с исправлениями
 using UnityEngine; 
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class AchMenu : MonoBehaviour
{
public int money;
public int total_money;
public Button firstAch;

private bool isFirst;

private void Start()
{
money = PlayerPrefs.GetInt("money", 0);
total_money = PlayerPrefs.GetInt("total_money", 0);
isFirst = PlayerPrefs.GetInt("isFirst", 0) == 1;

UpdateFirstAchStatus();
StartCoroutine(IdleFarm());
}

private void UpdateFirstAchStatus()
{
firstAch.interactable = total_money <= 10 && !isFirst;
}

public void GetFirst()
{
money += 10;
PlayerPrefs.SetInt("money", money);
total_money += 10;
PlayerPrefs.SetInt("total_money", total_money);
isFirst = true;
PlayerPrefs.SetInt("isFirst", isFirst ? 1 : 0);
UpdateFirstAchStatus();
}

private System.Collections.IEnumerator IdleFarm()
{
while (true)
{
yield return new WaitForSeconds(1);
money++;
PlayerPrefs.SetInt("money", money);
}
}

public void ToMenu()
{
SceneManager.LoadScene(0);
}
}
Похожие вопросы