gerar uma nova variavel??
3 participantes
Página 1 de 1
gerar uma nova variavel??
bom tarde guys, estou puxando para um text o valor de uma variavel static, que é a variavel de usuario. e o problema que estou tendo disso é que todos os players estão ficando com o mesmo nome... e isso não é o que eu desejo! estarei resumindo os codigos...
arquivo statico:
arquivo de login:
[color:a7c3=rgba(0, 0, 0, 0)]
arquivo que manuseia os dados do player
resumindo o que ta acontecendo:
- eu faço o login com o personagem teste1 e em outra janela com o personagem teste2
- porém ao inves de aparecer os nomes teste1 e teste2 em ambas as janelas
- aparece 2 players teste1 na janela que eu loguei com o teste1 e 2 players com o nome teste 2 na janela que eu loguei com o teste2.
espero que tenham entendido o problema, e dede ja agradeço.
no caso da foto eu use os logins "cadteste" e "lklklklk"
arquivo statico:
- Código:
public static class DBManager
{
public static string username;
}
arquivo de login:
[color:a7c3=rgba(0, 0, 0, 0)]
- Código:
DBManager.username = NomeInputField.text;
arquivo que manuseia os dados do player
- Código:
userName = userName.GetComponent<Text>();
userName.GetComponent<Text>().text = DBManager.username;
resumindo o que ta acontecendo:
- eu faço o login com o personagem teste1 e em outra janela com o personagem teste2
- porém ao inves de aparecer os nomes teste1 e teste2 em ambas as janelas
- aparece 2 players teste1 na janela que eu loguei com o teste1 e 2 players com o nome teste 2 na janela que eu loguei com o teste2.
espero que tenham entendido o problema, e dede ja agradeço.
no caso da foto eu use os logins "cadteste" e "lklklklk"
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
Variaveis staticas são variaveis que não são duplicadas ou seja vc acessa o valor original e se mudar o valor todos que tem esse script muda junto,pra resolver é só tirar o staticjoão hoffman escreveu:bom tarde guys, estou puxando para um text o valor de uma variavel static, que é a variavel de usuario. e o problema que estou tendo disso é que todos os players estão ficando com o mesmo nome... e isso não é o que eu desejo! estarei resumindo os codigos...
arquivo statico:
- Código:
public static class DBManager
{
public static string username;
}
arquivo de login:
[color:9f75=rgba(0, 0, 0, 0)]
- Código:
DBManager.username = NomeInputField.text;
arquivo que manuseia os dados do player
- Código:
userName = userName.GetComponent<Text>();
userName.GetComponent<Text>().text = DBManager.username;
resumindo o que ta acontecendo:
- eu faço o login com o personagem teste1 e em outra janela com o personagem teste2
- porém ao inves de aparecer os nomes teste1 e teste2 em ambas as janelas
- aparece 2 players teste1 na janela que eu loguei com o teste1 e 2 players com o nome teste 2 na janela que eu loguei com o teste2.
espero que tenham entendido o problema, e dede ja agradeço.
no caso da foto eu use os logins "cadteste" e "lklklklk"
diegopds- Mestre
- PONTOS : 3420
REPUTAÇÃO : 52
Idade : 26
Respeito as regras :
Re: gerar uma nova variavel??
se eu tirar o static n poderei ligar aos outros scripts
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
Essa classe DBManager pode ser uma classe Singleton assim você pode anexa-la a um objeto na unity.
Para acessar atribuir um valor poderia usar algo assim:
e para buscar algo assim:
- Código:
public class DBManager: MonoBehaviour
{
public static DBManager Instance;
public string username {get; set}
private void Awake()
{
Instance = this;
}
}
Para acessar atribuir um valor poderia usar algo assim:
- Código:
DBManager.Instance.username = "nome do player";
e para buscar algo assim:
- Código:
string variavel = DBManager.Instance.username;
darknecron- Iniciante
- PONTOS : 2646
REPUTAÇÃO : 3
Áreas de atuação : Unity & C#
Respeito as regras :
Re: gerar uma nova variavel??
primeiramente perdão pela demora de tempo fiquei sem internet , segundo; eu fiz exatamente como me mostrou, mas deu o seguinte erro:
Irei deixar ambos os codigos para poderem me auxiliar a enxergar algum erro, mas acho que é com o courotine (acho que é assim que diz)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class login : MonoBehaviour
{
//vars [----------------
public InputField NomeInputField;
public InputField SenhaInputField;
public Button LoginButton;
//----------------]
//voids [----------------
public void goMenu()
{
SceneManager.LoadScene(0);
}
public void CallLogin()
{
StartCoroutine(Login());
}
IEnumerator Login()
{
WWWForm form = new WWWForm();
form.AddField("nome", NomeInputField.text);
form.AddField("senha", SenhaInputField.text);
WWW www = new WWW("http://localhost/awaken/sql/login.php", form);
yield return www;
if(www.text == "0")
{
DBManager.Instance.username = NomeInputField.text;
SceneManager.LoadScene(3);
}else
{
Debug.Log("erro ao logar:" + www.text);
}
}
public void VerifyInputs()
{
LoginButton.interactable = (NomeInputField.text.Length >= 6 && NomeInputField.text.Length <= 16 && SenhaInputField.text.Length >= 6 && SenhaInputField.text.Length <= 16);
}
//----------------]
}
enquanto isso estou procurando soluções para esse erro de console, com algum sucesso irei postar aqui. Muito obrigado, acredito eu que esse método vai me ajudar bastante
- Código:
NullReferenceException: Object reference not set to an instance of an object
login+<Login>d__5.MoveNext () (at Assets/Scripts/login.cs:35)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <ee47be73f7ef409ca5e5ce4b121745b7>:0)
Irei deixar ambos os codigos para poderem me auxiliar a enxergar algum erro, mas acho que é com o courotine (acho que é assim que diz)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class login : MonoBehaviour
{
//vars [----------------
public InputField NomeInputField;
public InputField SenhaInputField;
public Button LoginButton;
//----------------]
//voids [----------------
public void goMenu()
{
SceneManager.LoadScene(0);
}
public void CallLogin()
{
StartCoroutine(Login());
}
IEnumerator Login()
{
WWWForm form = new WWWForm();
form.AddField("nome", NomeInputField.text);
form.AddField("senha", SenhaInputField.text);
WWW www = new WWW("http://localhost/awaken/sql/login.php", form);
yield return www;
if(www.text == "0")
{
DBManager.Instance.username = NomeInputField.text;
SceneManager.LoadScene(3);
}else
{
Debug.Log("erro ao logar:" + www.text);
}
}
public void VerifyInputs()
{
LoginButton.interactable = (NomeInputField.text.Length >= 6 && NomeInputField.text.Length <= 16 && SenhaInputField.text.Length >= 6 && SenhaInputField.text.Length <= 16);
}
//----------------]
}
enquanto isso estou procurando soluções para esse erro de console, com algum sucesso irei postar aqui. Muito obrigado, acredito eu que esse método vai me ajudar bastante
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
Olhando o erro por cima penso numa possibilidade deste erro.
Pode ser que você está anexado o script DBManager em um objeto da cena (3) do seu projeto
ou seja ele so vai existir nesta cena.
Caso seja isso faça o seguinte na primeira cena crie um gameobject e anexe o script DBManager neste objeto e no método Awake da classe DBManager anexe o seguinte código:
DontDestroyOnLoad(this.gameObject);
Este código não deixará o objeto DBManager ser destruido e ele será acessivel em qualquer cena do seu jogo.
Qualquer coisa tamo ae blz
Pode ser que você está anexado o script DBManager em um objeto da cena (3) do seu projeto
ou seja ele so vai existir nesta cena.
Caso seja isso faça o seguinte na primeira cena crie um gameobject e anexe o script DBManager neste objeto e no método Awake da classe DBManager anexe o seguinte código:
DontDestroyOnLoad(this.gameObject);
Este código não deixará o objeto DBManager ser destruido e ele será acessivel em qualquer cena do seu jogo.
Qualquer coisa tamo ae blz
darknecron- Iniciante
- PONTOS : 2646
REPUTAÇÃO : 3
Áreas de atuação : Unity & C#
Respeito as regras :
Re: gerar uma nova variavel??
Então, onde voce viu que o problema está na cena 3? e eu tambem não achei nenhum game object que o dbmanager está inserido, será que é outra coisa?
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
Boa tarde. Para funcionar a classe DBManager deve estar anexada a um gameobject caso contrario a instância dela não existirá.
e o trecho de código DontDestroyOnLoad(this.gameObject); deve ser adicionado a ela ficando assim:
Recomendo a leitura sobre o padrão singleton para entender melhor como funciona, sugiro o tutorial postado aqui no forum:
https://www.schultzgames.com/t2702-tutorial-singleton-a-melhor-forma-de-acessar-a-classe?highlight=singleton#19046
Bons estudos!
e o trecho de código DontDestroyOnLoad(this.gameObject); deve ser adicionado a ela ficando assim:
- Código:
public class DBManager: MonoBehaviour
{
public static DBManager Instance;
public string username {get; set;}
//ao iniciar a cena a unity inicia por este método
private void Awake()
{
//instancia única desta classe
Instance = this;
//não deixa este objeto ser destruido após mudar de cena
DontDestroyOnLoad(this.gameObject);
}
}
Recomendo a leitura sobre o padrão singleton para entender melhor como funciona, sugiro o tutorial postado aqui no forum:
https://www.schultzgames.com/t2702-tutorial-singleton-a-melhor-forma-de-acessar-a-classe?highlight=singleton#19046
Bons estudos!
darknecron- Iniciante
- PONTOS : 2646
REPUTAÇÃO : 3
Áreas de atuação : Unity & C#
Respeito as regras :
Re: gerar uma nova variavel??
pode ser qualquer objeto? até mesmo um criado apenas para conter a DBManager?
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
joão hoffman escreveu:pode ser qualquer objeto? até mesmo um criado apenas para conter a DBManager?
Isso mesmo qualquer gameobject, so renomear ele para DBManager por exemplo.
darknecron- Iniciante
- PONTOS : 2646
REPUTAÇÃO : 3
Áreas de atuação : Unity & C#
Respeito as regras :
Re: gerar uma nova variavel??
entao, fiz tudo certinho. Mas o problema continua... todos os jogadores ficam com o mesmo nome; tentei colocar a adição do username no nome do player através do "isLocalPlayer" e agora um jogador tem nome e todos os outros não.
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Re: gerar uma nova variavel??
Problema resolvido com sucesso, após tanto pesquisar descobri que as variáveis estavam presas no local (na máquina) e que eu precisava enviar via rpc para o servidor.... Segue abaixo o comando:
É possível que você tenha de adaptar a última linha de código, mas com isso funciona perfeitamente.
- Código:
[Command]
void enviarParaServidor(string username)
{
definirNomeParaClienteRPC(username);
}
[ClientRpc]
void definirNomeParaClienteRPC(string name)
{
gameObject.transform.FindChild("Canvas").transform.FindChild("Text").GetComponent<Text>().text = name;
}
É possível que você tenha de adaptar a última linha de código, mas com isso funciona perfeitamente.
joão hoffman- Iniciante
- PONTOS : 1515
REPUTAÇÃO : 1
Respeito as regras :
Tópicos semelhantes
» Como acessar uma variável de um script utilizando como parâmetro uma variável nomescript
» Gerar APK
» Gerar APK
» Gerar arvores com colisão.
» ERRO AO GERAR ILUMINAÇÂO
» Gerar APK
» Gerar APK
» Gerar arvores com colisão.
» ERRO AO GERAR ILUMINAÇÂO
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos