Основная проблема здесь:
Вам придется сбросить LastShownIntTimefloat
в вашем script2!
В противном случае вы просто продолжите перезапись он с новыми значениями, уменьшающими значение еще больше, и записывает его обратно в PlayerPrefs
→ в следующий раз, когда ваш script1 опрашивает значение, которое оно не сбрасывается, но уже перезаписано script2 !
В общем: Вы не должны использовать PlayerPrefs
, чтобы два компонента взаимодействовали!
В вашем случае здесь я бы даже не стал разделять logi c и беспокоиться с реализацией связи между ними, а объединяет их в один компонент.
Тогда нет необходимости читать и записывать PlayerPrefs
каждый кадр , а только на определенных контрольных точках, таких как
- Чтение один раз в
Start
- Запись один раз в
OnApplicationQuit
- Запись один раз в
OnDestroy
(это на случай, если вы, например, переключаете сцену, но не выходите из приложения) - Записывайте один раз каждый раз, когда ваш пользователь проигрывает (
showInterstitial
вызывается) - Запишите один раз при сбросе значения после показа рекламы
Я бы также просто использовал float
и GetFloat
и SetFloat
вместо преобразования его из и в int
.
public class MergedClass : MonoBehaviour
{
// Rather sue a FLOAT for time!
public float LastShownTime = 300;
void Start()
{
#if UNITY_ANDROID
Advertisement.Initialize(androidID);
#endif
// use 300 as default value if no PlayerPrefs found
LastShownTime = PlayerPrefs.GetFloat("LastShownTime", 300f);
}
public void Update()
{
if(LastShownTime > 0f) LastShownTime -= Time.deltaTime;
}
public void showInterstitial()
{
PlayerPrefs.SetFloat("LastShownTime", LastShownTime);
PlayerPrefs.Save();
if (LastShownTime <= 0f)
{
showInterstitialwith5mint();
}
}
public void showInterstitialwith5mint()
{
#if UNITY_ANDROID
Advertisement.Show("video");
#else
LastShownTime = 300f;
PlayerPrefs.SetFloat("LastShownTime", LastShownTime);
PlayerPrefs.Save();
}
private void OnApplicationQuit()
{
PlayerPrefs.SetFloat("LastShownTime", LastShownTime);
PlayerPrefs.Save();
}
private void OnDestroy()
{
PlayerPrefs.SetFloat("LastShownTime", LastShownTime);
PlayerPrefs.Save();
}
}