Unity C#'da nasıl timer durdurulup devam ettirilir?

Bertugs

Hectopat
Katılım
15 Haziran 2022
Mesajlar
109
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
Merhaba Unity üstünden yaptığım oyunda bir timer var.

Kod:
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class timer : MonoBehaviour
{
 [SerializeField] private Image timerimage;
 [SerializeField] private TextMeshProUGUI timertext;
 public float currenttime;
 [SerializeField] private float duration;

 public GameObject gamepanel;
 void Start()
 {
 currenttime = duration;
 timertext.text = currenttime.ToString();
 StartCoroutine(updatetime());
 }

 private void Update()
 {
 timeend();
 }

 private IEnumerator updatetime()
 {
 while (currenttime >= 0)
 {
 timerimage.fillAmount = Mathf.InverseLerp(0, duration, currenttime);
 timertext.text = currenttime.ToString();
 yield return new WaitForSeconds(1f);
 currenttime--;
 }
 yield return null;
 }

 public void timeend()
 {
 if (currenttime == 0)
 {
 SceneManager.LoadScene("Menu");
 }
 }

}

Timer bu şekilde zaman azaldıkça imagenin Fillini azaltıyor. Oyunda bir adette Pause ekranım var tuşa basınca oyun panelinin Setactive'sini False yapıyor devam ettirip Gamepanel'in Setactive'sini True yapınca timer olduğu saniyede donuyor. Timerı nasıl devam ettirebilirim panelin Setactive'sini True yaptıktan sonra?
 
Eğer durdurma ekranında oyun panelinin setactive değeri false yapılırsa, oyun duraklatılmış olur ve timer da durmaya devam eder yani sizin probleminiz. Ancak durdurma objesi kapatıldıktan sonra timerın devam etmesi için oyun panelinin setactive değerini true yapmanız yeterli olacaktır.


C#:
public void OnResumeButtonClick()
{
 //gameobject aka (bir diğer ismiyle durdurma ekranınız) kapatılır.
 gameObject.SetActive(false);

 // game panel true olur.
 gamepanel.SetActive(true);
}
 
Eğer durdurma ekranında oyun panelinin setactive değeri false yapılırsa, oyun duraklatılmış olur ve timer da durmaya devam eder yani sizin probleminiz. Ancak durdurma objesi kapatıldıktan sonra timerın devam etmesi için oyun panelinin setactive değerini true yapmanız yeterli olacaktır.

C#:
public void OnResumeButtonClick()
{
 //gameobject aka (bir diğer ismiyle durdurma ekranınız) kapatılır.
 gameObject.SetActive(false);

 // game panel true olur.
 gamepanel.SetActive(true);
}

Oyun ekranının setactive değeri true oluyor zaten durdurma objesi kapatılınca ama saniye azalmaya devam etmiyor. Şimdi aklıma geldi sürekli durdururlar zaten timerın bir amacı kalmaz o yüzden kaldıracağım pause ekranını.
 
Oyun ekranının setactive değeri true oluyor zaten durdurma objesi kapatılınca ama saniye azalmaya devam etmiyor. Şimdi aklıma geldi sürekli durdururlar zaten timerın bir amacı kalmaz o yüzden kaldıracağım pause ekranını.
Oyun objesi devre dışı bırakıldığında (emin değilim ama) başlattığın rutinler duruyor olabilir. Bunu rutin ile yapmak yerine FixedUpdate içinde bir float değeri "Time.fixedDeltaTime" kadar çıkarma işlemi yaparak sayı sıfırlanınca durdurup istediğin şekilde kullanırsan sanırım bu sorunu yaşamazsın.
 
Oyun objesi devre dışı bırakıldığında (emin değilim ama) başlattığın rutinler duruyor olabilir. Bunu rutin ile yapmak yerine FixedUpdate içinde bir float değeri "Time. FixedDeltaTime" kadar çıkarma işlemi yaparak sayı sıfırlanınca durdurup istediğin şekilde kullanırsan sanırım bu sorunu yaşamazsın.

Soru bilince gelen correct() Void'im vardı onu aldım ve timer da oluşturduğum timereset(); voidinin içine attım. correct(); voidinede currenttime = 10; dedim. Bu şekilde her doğru bilişimde şu anki zaman 10. saniyeye ayarlandı. Timerresetide Update'in içine attım. Böylece her doğru bilişte currenttime 10 oldu. Yine de yardımın için teşekkür ederim.
 

Technopat Haberler

Yeni konular

Yeni mesajlar

Geri
Yukarı