Merhaba arkadaşlar
Bir oyun tasarlıyorum bu oyunun içinde vip butonu hazırladım bu butona tıklandığında bir bool değerini true yapacak ve true olan booll değişkenin altında bir sayaç oluşturdum bu sayaç sıfır olana kadar player vip olanaklarından faydalanacak buraya kadar her şey çok güzel :

ama sayaç her sahnede çalışmıyor çeşitli yöntemler denedim ama kimisinde diğer sahnelere geçince başlat başladı kimisinde maxtime değerine eşitledi kimisinde hiç çalışmadı vs. Bu konu ile ilgili nasıl bir yöntem izlemem gerekiyor bilgisi olan arkaşlar yardım ederse sevinirim
Merhaba, öncelikle sayacın bulunduğu scripti her sahneye eklediğinizden emin olun. O sahnede script bir nesneye eklenmediyse çalışmayacaktır. Daha sonra Update fonksiyonunda sayacı arttıtdığınız kısımda Debug.Log(sayac); kodu ile sayacın durumunu takip edin, bir aksaklık olduğunu bu şekilde anlayabilirsiniz. Kodunuzu paylaşırsanız belki daha net bir cevap verebiliriz.
(29-10-2020, Saat: 17:29)mtat0640 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Merhaba, öncelikle sayacın bulunduğu scripti her sahneye eklediğinizden emin olun. O sahnede script bir nesneye eklenmediyse çalışmayacaktır. Daha sonra Update fonksiyonunda sayacı arttıtdığınız kısımda Debug.Log(sayac); kodu ile sayacın durumunu takip edin, bir aksaklık olduğunu bu şekilde anlayabilirsiniz. Kodunuzu paylaşırsanız belki daha net bir cevap verebiliriz.
Söyledikleriniz aynen yapıldı ama sayacın başlatıldığı sceneden farklı bir scene geçiş yapıldığında sayaç çalışmıyor . Kodlama şu şekilde
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Vip : MonoBehaviour
{
public float Sayaç;
public float vip_sayac;
public bool vip_aktif =false ;
public int a =0;
bool vip_sayac_kont;
// public Text Vip_Sayac_text;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (vip_aktif == true)
{
vip_sayac -= Time.deltaTime;
a = 1;
PlayerPrefs.SetInt("vipİD", a);
Debug.Log("vip sayac" + vip_sayac);
}
if (vip_sayac <= 0)
{
vip_aktif = false;
a = 0;
PlayerPrefs.SetInt("vipİD ", a);
Debug.Log("vip bitti");
}
}
public void Vip_button()
{
vip_sayac = 22;
vip_aktif = true;
vip_sayac_kont = true;
}
}
Kesin olmamakla birlikte bir önerim var dontdestroyonload un içine atsan belki çalışır.
Bence sorunu bir datetime gibi bir modul varsa onunla hallet. Şöyle yapılabilir bastığı andaki tarih saat bilgusini al sonra biteceği zamanı hesapla ve kaydet. Sonra zaman, kaydettigin zamandan buyuk olursa vipligi iptal ettirirsin eğer yapamassan tekrar geri bildir
zaman bilgisini nasıl alabilirim
Sayacınızı Vip_button fonksiyonu tetikliyor. İlgili butonun onclick ine bu kodu eklemeyi unutmuş olabilirsiniz. Onun haricinde kodunuz düzgün görünüyor, çalışmalı.
Sayaç bir sahnede çalışır durumdayken başka bir sahneye geçilirse sayaç önceki sahnede kaldığı yerden çalışmaya devam etsin istiyorsanız durum değişir. O zaman vip_sayac değerini her eksilttiğinizde playerprefs ile kaydetmelisiniz ve yeni sahneye geçildiğinde start fonksiyonunda vip_sayac değerini playerprefs ten çekip güncellemelisiniz ve vip_sayac >0 ise vip_aktif değerini true yapmalısınız. Böylece sahnedeğişsede sayaç kaldığı yerden çalışmaya devam eder.
Teşekkür ederim bunu deneyeceğim