Tela de shop/market na unity
2 participantes
Página 1 de 1
Tela de shop/market na unity
Estou criando um jogo estilo Tap Titans, estou trabalhando numa tela como se fosse um shop/market , onde você pode colocar upgrades no dano do personagem, aprimorar coisas que façam ele ter mais ouro por segundo e etc. Procurei na internet e só achei vídeos gringos sobre, eu tentei seguir um tutorial mas acabei não entendendo direito como era feito e acabei fazendo errado. Alguém poderia me ajudar?
darkrj- Avançado
- PONTOS : 2324
REPUTAÇÃO : 15
Respeito as regras :
Re: Tela de shop/market na unity
Olha, isso depende muito do que voce quer fazer, como voce quer fazer, nesses ultimos 3 dias fiz um exemplo de uma loja UI e o funcionamento de upgrades e etc. Vou mandar o script mas talvez possa parecer confuso, como fiz apensas em um script pode apenas piorar a situação, mas qualquer coisa é só perguntar, coloquei todas as variaveis publicas para voce alterar no inspector caso queira mudar algo, delete o que achar descenessario, fiz um sistema de vida, Coins e Damage e fiz seus respectivos upgrades, podem haver algumas gambiarras ou coisas que ainda possam melhorar ou diminuir o código, pois estou sem tempo esses dias, enfim, este é o script, vou tentar ao maximo explicar o que voce deve fazer. Caso voce nao queira o sistema de vida, exclua. Depois voce precisa criar sua propria loja UI no canvas, com os componentes que possuem no script.
Como ficou:
Nao liga para o personagem e os inimigos kkk, sao só testes. Como pode ver quando eu mato um inimigo eu fiz que ganho um recompensa de 20 gold por isso ele aumenta quando mata o inimigo, quando voce nao tem dinheiro suficiente, naao ira acontecer nada, se voce seguir corretamente o script verá que nao console irá mandar "insufficient gold to purchase".
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
[Space(0.2f)]
[Header("GOLD")]
//GOLD
public Text goldScore; //coloque seu texto de pontuação de ouro aqui
public float time; //tempo de espera para ganhar ouro automatico, voce pode definir
public int gold; //pontuação ouro
int goldPSecond = 1; //quantos ouros ganha por segundos
public int[] cost; //todos preços, voce também pode definir, eu coloquei como 20
bool earningGold = true; //está ganhado ouro
[Space(0.2f)]
[Header("HEALTH")]
//HEALTH
public Slider health;
public int maxHealth = 20;
public int currentHealth;
[Space(0.2f)]
[Header("DAMAGE")]
//DAMAGE
public Text damageScore; //coloque seu texto de pontuação de damage aqui
public int damage; //damage pontuação
[Space(0.2f)]
[Header("SHOP")]
//SHOP
public int initialCost = 20; //preço inicial, conforme clica no botao ele dobra
public Text[] purchaseUpgrades; //coloque o texto de preço dos itens aqui
public Button[] upgrade; //coloque todos seus botoes de upgrade aqui
void Start()
{
currentHealth = maxHealth;
health.value = currentHealth;
cost = new int[purchaseUpgrades.Length];
for(int i = 0; i<cost.Length; i++)
{
cost[i] = initialCost;
}
Cost(purchaseUpgrades[0],20,0);
Cost(purchaseUpgrades[1],20,0);
Cost(purchaseUpgrades[2],20,0);
foreach(var b in upgrade)
{
b.onClick = new Button.ButtonClickedEvent();
}
upgrade[0].onClick.AddListener(() => Upgrade(purchaseUpgrades[0], cost[0], 0));
upgrade[1].onClick.AddListener(() => Upgrade(purchaseUpgrades[1], cost[1], 1));
upgrade[2].onClick.AddListener(() => Upgrade(purchaseUpgrades[2], cost[2], 2));
}
void Update()
{
health.maxValue = maxHealth;
health.value = currentHealth;
goldScore.text = gold.ToString();
damageScore.text = damage.ToString();
if(earningGold){
StartCoroutine(WaitToEarnGold());
earningGold = !earningGold;
}
}
IEnumerator WaitToEarnGold()
{
yield return new WaitForSeconds(time);
gold+= goldPSecond;
earningGold = true;
}
public string Cost(Text text, int cost, int index)
{
this.cost[index] = cost;
return text.text = cost.ToString() + "$";
}
public void Upgrade(Text t, int newCost, int clickedButton)
{
if(gold < cost[clickedButton]){
Debug.Log("insufficient gold to purchase");
}
else{
Debug.Log("successful purchase");
gold -= cost[clickedButton];
Cost(purchaseUpgrades[clickedButton], newCost*2, clickedButton);
switch(clickedButton)
{
case 0:
goldPSecond++;
break;
case 1:
maxHealth += 20;
currentHealth = maxHealth;
break;
case 2:
damage +=5;
break;
default:
break;
}
}
}
}
Como ficou:
Nao liga para o personagem e os inimigos kkk, sao só testes. Como pode ver quando eu mato um inimigo eu fiz que ganho um recompensa de 20 gold por isso ele aumenta quando mata o inimigo, quando voce nao tem dinheiro suficiente, naao ira acontecer nada, se voce seguir corretamente o script verá que nao console irá mandar "insufficient gold to purchase".
Pokedlg- ProgramadorMaster
- PONTOS : 2337
REPUTAÇÃO : 198
Áreas de atuação : Iniciante: ShaderLab, Blender, Java, C++, ASP.NET.
Intermediário: C#.NET, Unity, Shader Graph.
Respeito as regras :
Tópicos semelhantes
» Unity trava com tela preta ao editar textura do Terrain - Unity 5.6.3p2
» Rotação de tela na Unity
» Unity 3d TELA PRETA
» Remover tela inicial Unity ?
» Unity - Touch na Tela do Celular
» Rotação de tela na Unity
» Unity 3d TELA PRETA
» Remover tela inicial Unity ?
» Unity - Touch na Tela do Celular
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos