• 13-07-2023, 10:37:08
    #10
    arti10net adlı üyeden alıntı: mesajı görüntüle
    İşlem yapıldı 100 enerjiden 20 enerji düştü yine aynı fonksiyonun son satırında datetime ile gün saat dakika alındıktan sonra sisteme nasıl bir şey mi eklemem gerekiyor ki en son yapılan işlemleri veya kullanıcı ne oyun içerisinde ne yaptıysa aklında tutabilsin?
    Bir de bu fonksiyonu update kısmında mı çalıştırmalıyım? Enerji kayıbından itibaren datetime alınıyor ve her 90 saniyede 1 artacak şekilde datetime fonksiyonu yazılıyor. Fakat oyun kapalıyken update fonksiyonu çalışmayacağı için fonksiyonda çalışmayacak ve oyun kapalıyken enerji dolumu gerçekleşmeyecektir. Bunun için bir biri ile bağlantılı hem startta hem update’te çalışan fonksiyonlar yazmalıyım? Veya farklı bir sorgu ile update fonksiyonunda oyun kapalıyken de açıkkende enerji dolumu yapabilecek bir fonksiyon yazabilir miyim?
    Galiba ilk sorum cevaplandığında bu sorum da cevaplanacaktır.
    Hocam 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:07
    #11
    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
  • 13-07-2023, 10:50:22
    #12
    arti10net adlı üyeden alıntı: mesajı görüntüle
    Liderlik tablosu yok. Oyun online bir oyun değil fakat oyun içi satın alımlardan kaçmak için bu dediklerinizi kullanarak hile yapılabilir.
    Tabi 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 diyebilirim Hızlandırmama rağmen 3 gün falan sürmüştü. Bu da oyun sahibine reklam geliri olarak döndü tabi