[RESOLVIDO] Duvida sistema de level
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Duvida sistema de level
Galera eu to prototipando algumas coisas e resolvi testar uma coisa com sistema de nivel, porem eu me encontrei com um pequeno problema
basicamente eu fiz um sistema de nivel simples em uma classe separada do script principal, e nessa classe possui um método que tem como parametro 3 variaveis, "nivel,xp,multiplicador" e eu coloco os dados dele tudo no script principal pra eu poder ver pelo "inspector" e debugando
e esta funcionando direito, o problema mesmo está na variavel "dandolvl" ela não se atualiza, a função está no update e ela está no parametro da função e la na classe está somando + 1 quando atinge o nivel de xp, o debug retorna que passou de nivel, mas no inspector o "dandolvl" fica sempre 1 e nunca incrementa, alguma coisa que fiz errado?
*SCRIPT PRINCIPAL*
*CLASSE DO SISTEMA DE LEVEL*
basicamente eu fiz um sistema de nivel simples em uma classe separada do script principal, e nessa classe possui um método que tem como parametro 3 variaveis, "nivel,xp,multiplicador" e eu coloco os dados dele tudo no script principal pra eu poder ver pelo "inspector" e debugando
e esta funcionando direito, o problema mesmo está na variavel "dandolvl" ela não se atualiza, a função está no update e ela está no parametro da função e la na classe está somando + 1 quando atinge o nivel de xp, o debug retorna que passou de nivel, mas no inspector o "dandolvl" fica sempre 1 e nunca incrementa, alguma coisa que fiz errado?
*SCRIPT PRINCIPAL*
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Habilidades : MonoBehaviour
{
public float dandoxp;
public int dandolvl;
public float multipladordexp = 1.1f;
CalculoXPANDNIVEL xpandlvl;
void Start()
{
xpandlvl = new CalculoXPANDNIVEL();
}
void Update()
{
if (Input.GetKey(KeyCode.Return))
{
dandoxp += 25.0f * Time.deltaTime;
xpandlvl.calculodexp(dandolvl,dandoxp, multipladordexp);
}
}
}
*CLASSE DO SISTEMA DE LEVEL*
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CalculoXPANDNIVEL
{
private float xpinicial = 0.0f;
private float xpalvo = 200.0f;
public void calculodexp(int lvl,float calculodexp,float multiplicadordexp)
{
xpinicial = calculodexp;
if(xpinicial >= xpalvo)
{
lvl++;
xpalvo *= multiplicadordexp;
Debug.Log("Passou de nivel");
}
}
}
nibirou- MembroAvançado
- PONTOS : 2073
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: [RESOLVIDO] Duvida sistema de level
Você basicamente só precisa enviar o Xp para o método e dentro do método modifica os valores, veja neste exemplo que fiz.
Fiz 2 métodos para o sistema de Level UP
O primeiro é para aumentar 25% do Xp máximo a cada vez que aumentar o level
O segundo método eu fiz com uma array com valores fixos para subir level
Para entender todo o processo, pegue o projeto que subi no meu github baixe o projeto
Fiz 2 métodos para o sistema de Level UP
O primeiro é para aumentar 25% do Xp máximo a cada vez que aumentar o level
- Código:
private void SetXp(int xp)
{
currentXp += xp;
if(currentXp >= nextXp)
{
currentXp -= nextXp;
nextXp *= 1.25f;
nextXp = Mathf.Round(nextXp);
currentLevel++;
}
UpdateUi();
O segundo método eu fiz com uma array com valores fixos para subir level
- Código:
private void SetXpFixed(int xp)
{
float[] nextXp = new float[10] { 50, 80, 130, 160, 200, 250, 300, 350, 400, 450};
currentXp += xp;
if (currentXp >= nextXp[currentLevel - 1])
{
currentXp-= nextXp[currentLevel - 1];
currentLevel++;
}
UpdateUiFixed(nextXp[currentLevel - 1]);
}
Para entender todo o processo, pegue o projeto que subi no meu github baixe o projeto
Re: [RESOLVIDO] Duvida sistema de level
Obrigado irmão vou utilizar o seu código, gostei dele, mas eu to querendo entender mesmo é oq está dando de errado com oq eu fiz, só por aprendizadoguimaraf escreveu:Você basicamente só precisa enviar o Xp para o método e dentro do método modifica os valores, veja neste exemplo que fiz.
Fiz 2 métodos para o sistema de Level UP
O primeiro é para aumentar 25% do Xp máximo a cada vez que aumentar o level
- Código:
private void SetXp(int xp)
{
currentXp += xp;
if(currentXp >= nextXp)
{
currentXp -= nextXp;
nextXp *= 1.25f;
nextXp = Mathf.Round(nextXp);
currentLevel++;
}
UpdateUi();
O segundo método eu fiz com uma array com valores fixos para subir level
- Código:
private void SetXpFixed(int xp)
{
float[] nextXp = new float[10] { 50, 80, 130, 160, 200, 250, 300, 350, 400, 450};
currentXp += xp;
if (currentXp >= nextXp[currentLevel - 1])
{
currentXp-= nextXp[currentLevel - 1];
currentLevel++;
}
UpdateUiFixed(nextXp[currentLevel - 1]);
}
pois voce disse que é só enviar xp para o método e dentro do método modificar os valores, mas é ai que ta o problema, eu faço isso, mas ele não está mudando o valor igual no seu "currentLevel++" no inspector, eu to usando o código em uma classe, não quero usar no código principal, no principal eu quero instanciar essa classe e passar por parametro o currentlevel e o xp, para o método da classe que la está sendo calculado
ai quando chega em 200 de xp, ele avisa "passou de nivel" mas nesse mesmo lugar está o "currentlevel++" mas no inspector ele não apareçe incrementado
nibirou- MembroAvançado
- PONTOS : 2073
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: [RESOLVIDO] Duvida sistema de level
Deixe apenas 1 classe para controlar Level, Xp, próximoXp, na classe na outra classe, deixe apenas a chamada do método para enviar o XP.
Da forma que está fazendo, toda vez que chamar o método, ele está vindo com valores zerados, por isso que não enxerga alterações nos valores.
Se a classe tem informações fixas, não pode instanciar uma nova toda vez que for usar.
Aliás, não é o método adequado.
Da forma que está fazendo, toda vez que chamar o método, ele está vindo com valores zerados, por isso que não enxerga alterações nos valores.
Se a classe tem informações fixas, não pode instanciar uma nova toda vez que for usar.
Aliás, não é o método adequado.
Re: [RESOLVIDO] Duvida sistema de level
Vlw Guimaraf, sei que não é o método adequado, mas eu precisava entender como que resolvia ele por aprendizado kkguimaraf escreveu:Deixe apenas 1 classe para controlar Level, Xp, próximoXp, na classe na outra classe, deixe apenas a chamada do método para enviar o XP.
Da forma que está fazendo, toda vez que chamar o método, ele está vindo com valores zerados, por isso que não enxerga alterações nos valores.
Se a classe tem informações fixas, não pode instanciar uma nova toda vez que for usar.
Aliás, não é o método adequado.
Bom fiz ele por um get mesmo como você disse, e ficou bem melhor na verdade tambem -- =D
*Script principal*
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HabilidadesdoPlayer : MonoBehaviour
{
public float obtendoXP;
public float multiplicador;
CalculoXPANDNIVEL SystemLVLXP;
public int levelDoPersonagem;
void Start()
{
obtendoXP = 1f;
multiplicador = 1.8f; // Porcentagem que ira multiplicar cada vez que upa de nivel
SystemLVLXP = new CalculoXPANDNIVEL();
}
void Update()
{
if (Input.GetKey(KeyCode.Return))
{
obtendoXP++;
SystemLVLXP.LevelSystem(obtendoXP, multiplicador);
levelDoPersonagem = SystemLVLXP.GetNivel();
}
}
}
*Script da Classe*
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CalculoXPANDNIVEL
{
private float xpINICIAL = 1f;
private float xpALVO = 200f;
private int niveldoPersonagem = 1;
public void LevelSystem(float xp,float multiplicador)
{
xpINICIAL = xp;
if(xpINICIAL >= xpALVO)
{
niveldoPersonagem++;
xpALVO *= multiplicador;
Debug.Log("Você passou para o próximo Nivel: " + niveldoPersonagem);
}
}
public int GetNivel()
{
return niveldoPersonagem;
}
}
Dessa forma eu achei bem mais limpo
nibirou- MembroAvançado
- PONTOS : 2073
REPUTAÇÃO : 15
Áreas de atuação : C#,C++,produção de audio
Respeito as regras :
Re: [RESOLVIDO] Duvida sistema de level
Se resolveu o que precisava, ótimo.
Depois procure o livro "Código Limpo" para aprender algumas técnicas de programação e para manter o código limpo, livro muito bom.
Depois procure o livro "Código Limpo" para aprender algumas técnicas de programação e para manter o código limpo, livro muito bom.
Tópicos semelhantes
» [RESOLVIDO] Dúvida relacionada ao sistema de inputs Rewired
» [RESOLVIDO] Gente estou com dúvida de como que faz o sistema do personagem (First Person)
» [Ajuda] Sistema de Loading Level
» [TUTORIAL] Sistema de liberar nível (Unlock Level) (5.3 ou superior)
» [DUVIDA]Level editor
» [RESOLVIDO] Gente estou com dúvida de como que faz o sistema do personagem (First Person)
» [Ajuda] Sistema de Loading Level
» [TUTORIAL] Sistema de liberar nível (Unlock Level) (5.3 ou superior)
» [DUVIDA]Level editor
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos