Run in Background seçeneğini kullanabilirsin
örnek vermek gerekirse ben olsam
Time.realtimeSinceStartup
kullanırdım ve
using UnityEngine;
public class EnergyManager : MonoBehaviour
{
public int maxEnergy = 100;
public int energyDecreaseAmount = 20;
public float energyIncreaseInterval = 90f;
private int energy;
private float lastEnergyIncreaseTime;
private void Start()
{
energy = maxEnergy;
lastEnergyIncreaseTime = Time.realtimeSinceStartup;
}
private void Update()
{
float currentTime = Time.realtimeSinceStartup;
// Belirli bir süre geçtiğinde enerjiyi artır
if (currentTime - lastEnergyIncreaseTime >= energyIncreaseInterval)
{
lastEnergyIncreaseTime = currentTime;
// Enerjiyi artır
energy++;
if (energy > maxEnergy)
{
energy = maxEnergy;
}
}
}
public void DecreaseEnergy()
{
energy -= energyDecreaseAmount;
if (energy < 0)
{
energy = 0;
}
// Enerji azaldığında yapılacak işlemler
}
}
Update() metodu her karede çağrıldığından enerji seviyesi düzenli olarak kontrol edilir ve güncellenir.
Bu şekilde, oyunun kapalı olduğu durumlarda bile enerji seviyesi güncellenir ve belirli bir süre (energyIncreaseInterval) geçtiğinde artırılır.
örnek 2 vermek gerekirse
using UnityEngine;
public class EnergyManager : MonoBehaviour
{
public int maxEnergy = 100;
public int energyDecreaseAmount = 20;
public float energyIncreaseInterval = 90f;
private int energy;
private float lastEnergyIncreaseTime;
private void Start()
{
energy = maxEnergy;
lastEnergyIncreaseTime = PlayerPrefs.GetFloat("LastEnergyIncreaseTime", 0f);
// Oyun kapalıyken arka planda enerji güncellemesini sağlamak için
Application.runInBackground = true;
}
private void OnApplicationPause(bool pauseStatus)
{
if (pauseStatus)
{
// Oyun durduğunda son enerji güncelleme zamanını kaydet
PlayerPrefs.SetFloat("LastEnergyIncreaseTime", lastEnergyIncreaseTime);
PlayerPrefs.Save();
}
else
{
// Oyun tekrar devam ederken son enerji güncelleme zamanını kontrol et
float currentTime = Time.realtimeSinceStartup;
float timeSinceLastIncrease = currentTime - lastEnergyIncreaseTime;
// Belirli bir süre geçtiyse enerjiyi artır
if (timeSinceLastIncrease >= energyIncreaseInterval)
{
int energyIncreaseAmount = Mathf.FloorToInt(timeSinceLastIncrease / energyIncreaseInterval);
energy += energyIncreaseAmount;
if (energy > maxEnergy)
{
energy = maxEnergy;
}
lastEnergyIncreaseTime = currentTime;
}
}
}
private void OnApplicationQuit()
{
// Oyun kapatıldığında son enerji güncelleme zamanını kaydet
PlayerPrefs.SetFloat("LastEnergyIncreaseTime", lastEnergyIncreaseTime);
PlayerPrefs.Save();
}
public void DecreaseEnergy()
{
energy -= energyDecreaseAmount;
if (energy < 0)
{
energy = 0;
}
// Enerji azaldığında yapılacak işlemler
}
}
Unity'deki OnApplicationPause ve OnApplicationQuit yöntemlerini kullanır. OnApplicationPause metodu, oyun duraklatıldığında ve tekrar devam ettiğinde çağrılırken, OnApplicationQuit metodu ise oyun kapatıldığında çağrılır.
OnApplicationPause metodunda, oyun durduğunda son enerji güncelleme zamanı kaydedilir ve oyun tekrar devam ettiğinde son enerji güncelleme zamanı kontrol edilir. Belirli bir süre (energyIncreaseInterval) geçtiyse enerji seviyesi artırılır.
OnApplicationQuit metodu ise oyun kapatıldığında son enerji güncelleme zamanını kaydeder.
Ayrıca,
Application.runInBackground = true; satırı ile oyun kapalıyken de arka planda işlemlerin devam etmesini sağlıyoruz.
Bu şekilde, oyunun açık veya kapalı olduğu durumlarda enerji seviyesi güncellenir ve belirli bir süre (energyIncreaseInterval) geçtiğinde artırılır. Enerji seviyesi arka planda tutulan son enerji güncelleme zamanı kullanılarak doğru şekilde hesaplanır ve kaydedilir.
gibi olabilir aslında