Unity shop sistemi ile satın alınan şey seçilmiyor

Abdullah00

Hectopat
Katılım
6 Mart 2022
Mesajlar
41
Çözümler
1
Daha fazla  
Cinsiyet
Diğer
Arkadaşlar yardımcı olur musunuz?

Unity de shop sistemi yaptım çalışıyor para eksiliyor satın alınca ama satın aldığım şeyi select yani seçemiyorum, seçip oyuna başlayınca o seçtiğim kostüm neyse onunla başlamasını istiyorum.
 

Dosya Ekleri

  • 16687804852397890910322760352806.jpg
    16687804852397890910322760352806.jpg
    87,6 KB · Görüntüleme: 37
  • 16687806604577501210268026922275.jpg
    16687806604577501210268026922275.jpg
    103,3 KB · Görüntüleme: 39
Son düzenleyen: Moderatör:
Arkadaşlar yardımcı olur musunuz?

Unity de shop sistemi yaptım çalışıyor para eksiliyor satın alınca ama satın aldığım şeyi select yani seçemiyorum, seçip oyuna başlayınca o seçtiğim kostüm neyse onunla başlamasını istiyorum.
Yeni bir script oluştur. Script içine static bir değişken ata hangi kostümün seçildiğine dair. Tavsiyem integer değer atamanızdır. Sonra o değeri farklı sahnede(oyun başladığında mesela) çekip kostümü değiştirebilirsiniz. Daha sade nasıl anlatırım bilmiyorum kod yokken.
 
Yeni bir script oluştur. Script içine static bir değişken ata hangi kostümün seçildiğine dair. Tavsiyem integer değer atamanızdır. Sonra o değeri farklı sahnede(oyun başladığında mesela) çekip kostümü değiştirebilirsiniz. Daha sade nasıl anlatırım bilmiyorum kod yokken.
Yardımınız için teşekkür ederim
shop için yazdığım kodları buraya atiyim daha iyi anlarsınız.Attığım formatta kabıl edilmediği için kodu böyle atmak zorunda kaldım.

Kod:
shop kodu:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Shop : MonoBehaviour
{
    [System.Serializable] class ShopItem
    {
        public Sprite Image;
        public int Price;
        public bool IsPurchased = false;
    }
    [SerializeField] List<ShopItem> ShopItemsList;
    [SerializeField] Animator No_CoinsAnim;
    [SerializeField] Text CoinsText;
    GameObject ItemTemplate;
    GameObject g;
    [SerializeField] Transform ShopScrollView;
    Button buyBtn;
    void Start()
    {
        ItemTemplate = ShopScrollView.GetChild (0).gameObject;
        int len = ShopItemsList.Count;
        for (int i = 0; i < len; i++)
        {
            g = Instantiate (ItemTemplate, ShopScrollView);
            g.transform.GetChild (0).GetComponent <Image> ().sprite = ShopItemsList .Image;
            g.transform.GetChild (1).GetChild (0).GetComponent <Text> ().text = ShopItemsList .Price.ToString ();
            buyBtn = g.transform.GetChild (2).GetComponent <Button> ();
            buyBtn.interactable = !ShopItemsList .IsPurchased;
            buyBtn.AddEventListener (i, OnShopItemBtnClicked);
        }
        Destroy (ItemTemplate);
        //UI coin textini degistir
        SetCoinsUI ();
    }
#region Satin Alma
    void OnShopItemBtnClicked (int itemIndex)
    {
        if (Coins_System.Instance.HasEnoughCoins (ShopItemsList[itemIndex].Price)) //Amount/Tutar
        {
            Coins_System.Instance.UseCoins (ShopItemsList[itemIndex].Price);  //Amount/Tutar
            //Satin Alindi yazmasi
            ShopItemsList [itemIndex].IsPurchased = true;
            //Buton renginin satin alindi olmasi
            buyBtn = ShopScrollView.GetChild (itemIndex).GetChild (2).GetComponent <Button> ();
            buyBtn. interactable = false;
            buyBtn.transform.GetChild (0).GetComponent <Text>().text = "Purchased";
            
            //UI coin textini degistir
            SetCoinsUI();
        }
        else
        {
            No_CoinsAnim.SetTrigger ("No_Coins");
            Debug.Log("You don't enough coins!!");
        }
    }
#endregion
    //Coin textini degistirme
    void SetCoinsUI()
    {
        CoinsText.text = Coins_System.Instance.Coins.ToString ();
    }
}

[QUOTE="dyternal, post: 17691352, member: 433725"]
Yeni bir script oluştur. Script içine static bir değişken ata hangi kostümün seçildiğine dair. Tavsiyem integer değer atamanızdır. Sonra o değeri farklı sahnede(oyun başladığında mesela) çekip kostümü değiştirebilirsiniz. Daha sade nasıl anlatırım bilmiyorum kod yokken.
[/QUOTE]
Buda satın almak için olan kod

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public static class Buy_Button
{
    public static void AddEventListener<T> (this Button button, T param, Action<T> OnClick)
    {
        button.onClick.AddListener (delegate()
        {
            OnClick (param);
        });
    }
}


Coin sistemi bu kadar

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Coins_System : MonoBehaviour
{
    #region SIngleton:Coins_System
    public static Coins_System Instance;
    void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad (gameObject);
        }
        else
        {
            Destroy (gameObject);
        }
    }
    #endregion
    public int Coins;
    public void UseCoins (int amount)
    {
        Coins -= amount;
    }
    public bool HasEnoughCoins (int amount)
    {
        return (Coins >= amount);
    }
}

Player scriptine de bir şey yazacağız galiba isterseniz atabilirim hemen.
 
Son düzenleyen: Moderatör:
Yardımınız için teşekkür ederim
shop için yazdığım kodları buraya atiyim daha iyi anlarsınız.Attığım formatta kabıl edilmediği için kodu böyle atmak zorunda kaldım.
shop kodu:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Shop : MonoBehaviour
{
[System.Serializable] class ShopItem
{
public Sprite Image;
public int Price;
public bool IsPurchased = false;
}
[SerializeField] List<ShopItem> ShopItemsList;
[SerializeField] Animator No_CoinsAnim;
[SerializeField] Text CoinsText;
GameObject ItemTemplate;
GameObject g;
[SerializeField] Transform ShopScrollView;
Button buyBtn;
void Start()
{
ItemTemplate = ShopScrollView.GetChild (0).gameObject;
int len = ShopItemsList.Count;
for (int i = 0; i < len; i++)
{
g = Instantiate (ItemTemplate, ShopScrollView);
g.transform.GetChild (0).GetComponent <Image> ().sprite = ShopItemsList .Image;
g.transform.GetChild (1).GetChild (0).GetComponent <Text> ().text = ShopItemsList .Price.ToString ();
buyBtn = g.transform.GetChild (2).GetComponent <Button> ();
buyBtn.interactable = !ShopItemsList .IsPurchased;
buyBtn.AddEventListener (i, OnShopItemBtnClicked);
}
Destroy (ItemTemplate);
//UI coin textini degistir
SetCoinsUI ();
}
#region Satin Alma
void OnShopItemBtnClicked (int itemIndex)
{
if (Coins_System.Instance.HasEnoughCoins (ShopItemsList[itemIndex].Price)) //Amount/Tutar
{
Coins_System.Instance.UseCoins (ShopItemsList[itemIndex].Price); //Amount/Tutar
//Satin Alindi yazmasi
ShopItemsList [itemIndex].IsPurchased = true;
//Buton renginin satin alindi olmasi
buyBtn = ShopScrollView.GetChild (itemIndex).GetChild (2).GetComponent <Button> ();
buyBtn. interactable = false;
buyBtn.transform.GetChild (0).GetComponent <Text>().text = "Purchased";

//UI coin textini degistir
SetCoinsUI();
}
else
{
No_CoinsAnim.SetTrigger ("No_Coins");
Debug.Log("You don't enough coins!!");
}
}
#endregion
//Coin textini degistirme
void SetCoinsUI()
{
CoinsText.text = Coins_System.Instance.Coins.ToString ();
}
}



Buda satın almak için olan kod

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
public static class Buy_Button
{
public static void AddEventListener<T> (this Button button, T param, Action<T> OnClick)
{
button.onClick.AddListener (delegate()
{
OnClick (param);
});
}
}


Coin sistemi bu kadar

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Coins_System : MonoBehaviour
{
#region SIngleton:Coins_System
public static Coins_System Instance;
void Awake()
{
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad (gameObject);
}
else
{
Destroy (gameObject);
}
}
#endregion
public int Coins;
public void UseCoins (int amount)
{
Coins -= amount;
}
public bool HasEnoughCoins (int amount)
{
return (Coins >= amount);
}
}

Player scriptine de birşey yazıcaz galiba isterseniz atabilirim hemen.
paste.ee ile atar mısınız kodu?
 
Karakterinde int bir variable olmalı. (0, 1, 2, ..., n) Oyun başlangıcında bunun değerine göre karakterinin kıyafetini atamalısın. Switch case yapısı. Kaç tane farklı kıyafet varsa o kadar. İstersen kıyafetsiz durumu da eklersin.
Ürünü satın aldıktan sonra karakterinin verilerine ulaşıp bu int değerini güncellemen lazım. Satın alınan ürünün int değeri neyse karakterin int değeri de o olmalı.
Unity kullanmadım ama mantık böyle.
 

Technopat Haberler

Yeni konular

Geri
Yukarı