if (total_money >= 10 && !isFirst)
{
firstAch.interactable = true;
}
else
{
firstAch.interactable = false;
StartCoroutine(IdleFarm());
}
Это изменение условия поможет вызывать функцию GetFirst() и получать достижение, когда игрок накопит необходимое количество очков. int money = PlayerPrefs.GetInt("money");
money += 10;
PlayerPrefs.SetInt("money", money);
Здесь значение денег переписывается в настройках, но при этом не меняется значение поля money (здесь объявлена локальная переменная). 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);
}
}
код:
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()
{
}
}