arti10net adlı üyeden alıntı:
mesajı görüntüle
Unity oyun kapalıyken sayacın çalışması
11
●242
- 13-07-2023, 10:37:08Hocam programı nasıl yazabilirsiniz bilemiyorum bu yüzden sadece kullanmanız gereken temel mantığı yazmıştım. Ama yukarıda dediğiniz gibi birbiri ile bağlantılı hem startta hem update de çalışan fonksiyonların yazılması mantıklı olur veya aynı fonksiyonu hem startta hem update de çalıştırabilirsiniz.
- 13-07-2023, 10:42:07Run 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 - 13-07-2023, 10:50:22Tabi ki, benim oynadığım oyunda oyun içi satın alımlardan çok az kaçılıyordu bu mantıkla. Açıkçası normalde oynamayacağım oyunu hızlandırıp oynadım ve reklam yiye yiye bitirdim diyebilirimarti10net adlı üyeden alıntı: mesajı görüntüle
Hızlandırmama rağmen 3 gün falan sürmüştü. Bu da oyun sahibine reklam geliri olarak döndü tabi
Hızlandırmama rağmen 3 gün falan sürmüştü. Bu da oyun sahibine reklam geliri olarak döndü tabi