Unity de süreli hediye sistemi

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
Oyunlarda görmüştürsünüz belli bir süre sonrasında buton aktif olur ve hediyeyi alırsın aldıktan sonra ise takrar kapanır bir süre belirir ve o süre bitince tekrardan alabilirsin, bugün bu sistemi anlatacağım.
(2D üzerinde canvas kullanacağım, unityde çok amatör olmadığınızı düşünüyorum.)

Projenize Canvas ekleyin ve Canvasa tıklayarak özelliklerinden UI Scale Mode yi bulup ordaki seçeneği Scale With Screen Size olarak değiştiriyoruz ve Create Empty diyerek gameobject oluşturuyoruz
Sonra Canvasımıza bir Buton ekliyoruz(Butonun içindeki Text'i silme istersen boyutunu değiştirebilirsin yada konumunu sana kalmış)
Butonumuzuda ekledikten sonra projemize HediyeSistemi adında c# script oluşturun isterseniz ismini değiştirebilirsiniz ardından scriptimizi oluşturduğumuz gameobjectin içine atıyoruz
Gameobject.png

Scriptimize UI kütüphanemizi ekleyelim (using UnityEngine.UI)
kütüphane.png

ardından public olarak zaman adında Text tanımlayalım(public Text zaman) ondan sonra saat, dakika, saniye, maxSaat ,maxDakika ,maxSaniye olarak public float tanımlayalım(public float saat,dakika,saniye,maxSaat,maxDakika,maxSaniye), alınabilir adında bool tanımlayalım(bool alınabilir) ve Public olarak Button tanımlayalım(public Button ödülButonu)
tanımlar.png

sonra canvastaki butonumuzu scriptte oluşturduğumuz buton tanımına sürükleyip bırakıyoruz(ödülButonu) ve butonun içindeki texti sürükleyip oluşturduğumuz text kısmına atıyoruz(zaman) ondan sonra ise max saniye dakika ve saati istediğiniz gibi ayarlayın ondan sonra ayarladığınız miktarın aynısını saat dakika ve saniye içinde yapın.
Script.png

----
Sonra butona tıklayıp özelliklerinden aşağı inip onclick i bulalım ve + ikonuna basalım ondan sonra çıkan yerde runtime only nin altına gameobjectimizi sürükleyelim bırakalım runtime only nin yanına ise tıklayıp hediye sistemini seçip ordanda sandığı seçelim.
Button.png

Şimdi bir tane Public void oluşturacağız sandık adında bu şekilde

public void sandık()
{
//Kodlar buraya yazılacak
}

Bundan sonra sandık scriptimizin içine şu kodları girecez
----
if (alınabilir)
{
alınabilir = false;
saat = maxSaat;
dakika = maxDakika;
saniye = maxSaniye;
}
sandık.png

----
sonra void updatenin içinede bunları girecez
----
if (alınabilir == false)
{
ödülButonu.interactable = false;
if (saniye > 0)
{
saniye -= 1 * Time.deltaTime;
}
if (saniye <= 0)
{
if (dakika > 0)
{
dakika -= 1;
saniye = 59;
}
}
if (dakika < 0)
{
saat -= 1;
dakika = 59;
}
int x = Convert.ToInt32(saniye);
zaman.text = saat + " saat " + dakika + " dakika " + x + " saniye kaldı.";
if(saat==0 && dakika==0 && x == 0)
{
alınabilir = true;
}
}
if (alınabilir == true)
{
ödülButonu.interactable = true;
zaman.text = "Ödül Alınabilir";
}
PlayerPrefs.SetFloat("saat", saat);
PlayerPrefs.SetFloat("dakika", dakika);
PlayerPrefs.SetFloat("saniye", saniye);
voidUpdate.png

----
void start ın içine ise bu kodları girecez
----
saat = PlayerPrefs.GetFloat("saat");
dakika = PlayerPrefs.GetFloat("dakika");
saniye = PlayerPrefs.GetFloat("saniye");
voidStart.png

----
Bütün kodlar(Copy Paste için)
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HediyeSistemi : MonoBehaviour // Bakın eğer scriptinizin ismini HediyeSistemi koymadıysanız şurdaki HediyeSistemi yazan yeri kendi koyduğunuz script ismiyle değiştirin.
{
public Button ödülButonu;
public Text zaman;
public float saat, dakika, saniye,maxSaat,maxDakika,maxSaniye;
bool alınabilir;
void Start()
{
saat = PlayerPrefs.GetFloat("saat");
dakika = PlayerPrefs.GetFloat("dakika");
saniye = PlayerPrefs.GetFloat("saniye");
}
public void sandık()
{
if (alınabilir)
{
alınabilir = false;
saat = maxSaat;
dakika = maxDakika;
saniye = maxSaniye;
}
}

// Update is called once per frame
void Update()
{
if (alınabilir == false)
{
ödülButonu.interactable = false;
if (saniye > 0)
{
saniye -= 1 * Time.deltaTime;
}
if (saniye <= 0)
{
if (dakika > 0)
{
dakika -= 1;
saniye = 59;
}
}
if (dakika < 0)
{
saat -= 1;
dakika = 59;
}
int x = Convert.ToInt32(saniye);
zaman.text = saat + " saat " + dakika + " dakika " + x + " saniye kaldı.";
if(saat==0 && dakika==0 && x == 0)
{
alınabilir = true;
}
}
if (alınabilir == true)
{
ödülButonu.interactable = true;
zaman.text = "Ödül Alınabilir";
}
PlayerPrefs.SetFloat("saat", saat);
PlayerPrefs.SetFloat("dakika", dakika);
PlayerPrefs.SetFloat("saniye", saniye);
}
}
Video :)

umarım oyunlarınızda işe yarar
Post automatically merged:

video kalitesi çok kötüymüş :D neyse
 

Ekli dosyalar

  • sandık.png
    sandık.png
    5.4 KB · Görüntüleme: 49
  • sandık.png
    sandık.png
    5.4 KB · Görüntüleme: 53
Onaylı Üye
Katılım
8 Tem 2020
Mesajlar
123
Tepki puanı
4
Ödüller
5
5 HİZMET YILI
Bende kodlamaya ve oyun tasarımına çok meraklı biriyimdir ancak anlayamadığım bir şey var bu unityde bazen yaptığım projeler kaydedilmeden siline biliyor nedeni nedir sizce ?
 
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
Bende kodlamaya ve oyun tasarımına çok meraklı biriyimdir ancak anlayamadığım bir şey var bu unityde bazen yaptığım projeler kaydedilmeden siline biliyor nedeni nedir sizce ?
hiç böyle bir sorunla karşılaşmadım ama projenizi açıktan sonra direk çıkıp kaydederseniz çözülür gibi
 
temmie
Seçkin Üye
Katılım
3 Ağu 2019
Mesajlar
455
Çözümler
6
Tepki puanı
74
Ödüller
5
Yaş
26
6 HİZMET YILI
gayet güzel olmuş unity ile ilgilenenlerin çok işine yarar teşekkürler :)
 
Üye
Katılım
9 Tem 2020
Mesajlar
48
Çözümler
1
Tepki puanı
1
Yaş
23
5 HİZMET YILI
Eline Emeğine Sağlık guzel calisma olmus tesekkurler paylastigin icin
 
Üye
Katılım
9 Tem 2020
Mesajlar
25
Tepki puanı
0
Yaş
26
5 HİZMET YILI
parabéns bom trabalho
Post automatically merged:

tebrikler, güzel bir iş
Post automatically merged:

tebrikler, güzel bir iş
 
Onaylı Üye
Katılım
21 Ara 2017
Mesajlar
50
Tepki puanı
0
Ödüller
5
Yaş
30
8 HİZMET YILI
her bir yerinden emek fışkıtırıyor helal olsun
 
Onaylı Üye
Katılım
8 May 2019
Mesajlar
99
Tepki puanı
0
Ödüller
5
Yaş
26
7 HİZMET YILI
bu kodlama falan çok karışık geliyor bana ya :))
 
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
Beyler yanlış anlamayın süreli diyoruz ama bu oyunda geçirilen süre için verilebilecek hediye sistemi mesela günde 10dk oyunu oyna hediyeyi al dersin 10dk oynar hediyeyi alabilir oyundan çıkınca devam etmez o süre o sistem çok farklı
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst