[Duvida] Acesso a Classes no C#
4 participantes
Página 1 de 1
[Duvida] Acesso a Classes no C#
Pessoal eu sei como acessar classes no c# mas eu estou tentando fazer o seguinte em Exemplo apenas..
Script Player
-----------------------------------------------------------------------------------
o script "Player" acessa e modifica normal o script "Habilidades", porem no script "modificandohabilidades" eu quero acessar o valor que o Script "Player" modificou
sem ter que chamalo pra ter acesso a modificação
*Eu quero chamar no "ModificandoHabilidades" o script "Habilidades" que tem poder = 0, porem se eu der um debug.log
em "Habilidades.poder" através do "ModificandoHabilidades" ele tem que retornar "30" e não 0 pois o player modificou
então basicamente eu quero manipular oque o Player modifica na classe Habilidades através da classe "ModificandoHabilidades" que tenta modificar o valor que "Player"
colocou através do script class "Habilidades"
Script Player
- Código:
public Habilidades habilidades;
habilidades.poder = 30;
- Código:
int poder = 0;
-----------------------------------------------------------------------------------
o script "Player" acessa e modifica normal o script "Habilidades", porem no script "modificandohabilidades" eu quero acessar o valor que o Script "Player" modificou
sem ter que chamalo pra ter acesso a modificação
*Eu quero chamar no "ModificandoHabilidades" o script "Habilidades" que tem poder = 0, porem se eu der um debug.log
em "Habilidades.poder" através do "ModificandoHabilidades" ele tem que retornar "30" e não 0 pois o player modificou
então basicamente eu quero manipular oque o Player modifica na classe Habilidades através da classe "ModificandoHabilidades" que tenta modificar o valor que "Player"
colocou através do script class "Habilidades"
Ionick10- Iniciante
- PONTOS : 1933
REPUTAÇÃO : 0
Respeito as regras :
Re: [Duvida] Acesso a Classes no C#
Faz com que a variável "poder" seja estática, dessa forma ela vai compartilhar com todas as classes o seu valor:
Para chamar, não precisa criar uma nova instância, basta fazer o seguinte:
Para modificar o valor:
Para ler o valor:
- Código:
public static int poder;
Para chamar, não precisa criar uma nova instância, basta fazer o seguinte:
- Código:
Habilidades.poder;
Para modificar o valor:
- Código:
Habilidades.poder = 30;
Para ler o valor:
- Código:
public class ModificandoHabilidades : Monobehaviour{
void Start(){
Debug.Log(Habilidades.poder);
}
}
Re: [Duvida] Acesso a Classes no C#
MayLeone escreveu:Faz com que a variável "poder" seja estática, dessa forma ela vai compartilhar com todas as classes o seu valor:
- Código:
public static int poder;
Para chamar, não precisa criar uma nova instância, basta fazer o seguinte:
- Código:
Habilidades.poder;
Para modificar o valor:
- Código:
Habilidades.poder = 30;
Para ler o valor:
- Código:
public class ModificandoHabilidades : Monobehaviour{
void Start(){
Debug.Log(Habilidades.poder);
}
}
mas ai sendo static tambem não resolve meu problema, pois mesmo que eu faça "Habilidades.poder = 30;" no Script Player
no Script "ModificandoHabilidades" quando eu der o debug em "Habilidades.poder" ele vai me retornar o valor padrão de onde eu defini o "public static int poder;" que no caso por padrão é "0"
e não o "30" que coloquei no script Player
Ionick10- Iniciante
- PONTOS : 1933
REPUTAÇÃO : 0
Respeito as regras :
Re: [Duvida] Acesso a Classes no C#
Não mesmo, porque essa é a função do static.
Poste os Scripts completos de como você está fazendo.
Poste os Scripts completos de como você está fazendo.
Re: [Duvida] Acesso a Classes no C#
MayLeone escreveu:Não mesmo, porque essa é a função do static.
Poste os Scripts completos de como você está fazendo.
Então eu acho que talvez eu consegui resolver mas de um jeito que pode me confundir futuramente eu basicamente usei "ScriptableObjects" Vou explicar bem pois pode ser que alguem tenha a mesma dúvida
*******************************Eu tenho 3 Classe de Scripts*****************
1° -- Classe do Player
- Código:
public class Player : MonoBehaviour
{
public SCRIPTABLEACESS testehabilit;
void Start()
{
testehabilit.habilit[0].power = 50; // Aqui eu estou definindo que o Player tera poder 50
}
}
2° -- Classe que vira um ScriptableObject dando acesso a classe Habilit e futuramente outras..
- Código:
[CreateAssetMenu(fileName = "ScriptableObject",menuName = "AcessoATodosScripts")]
public class SCRIPTABLEACESS : ScriptableObject
{
public Habilit[] habilit = new Habilit[5]; // Aqui é um Array da classe Habilit pra caso eu precise ter um novo acesso pra modificar sem que altere o do Player principal
// No Inspector do ScriptableObject dessa classe eu tenho que arrastar a class "Habilit" pra ele
}
3° -- Classe de habilidades
- Código:
[CreateAssetMenu(fileName = "habilitscriptable",menuName ="HabilitsConfig")]
public class Habilit : ScriptableObject
{
public int power = 0;
}
// Nesse Script aqui ele não pode ser uma classe comum pois la no "SCRIPTABLEACESS" da erro de instance object algo assim, então o habilit tem que derivar de um ScriptableObject
// SE SOUBER UMA MANEIRA DE CONTORNAR ISSO TAMBEM ACEITO, isso pode me confundir no projeto em diante
4° -- Classe que ira modificar os valores refletindo no principal onde está definido os valores originais
- Código:
public class ModificadorDeValor : MonoBehaviour
{
public SCRIPTABLEACESS acessandoscripts;
private void Start()
{
Debug.Log(acessandoscripts.habilit[0].power); // Aqui ele ira retornar "50" que defini la no script "Player"
}
//Porem se eu colocar um input pra quando eu apertar a tecla "E" ele vai adicionar +10 ao power, ele ira refletir diretamente la no Player tambem
private void Update(){
if(Input.GetKeyDown(KeyCode.E)){
acessandoscripts.habilit[0].power += 10;
Debug.Log(acessandoscripts.habilit[0].power); //Se colocar esse Debug la no script do player no update dele, voce vera 2 Debug do mesmo valor subindo igual tanto aqui quanto la
}
}
}
// Obs: Até funciona desse jeito, mas só o fato de o Script "Habilit" ter que ser um "ScriptableObject" pra poder chamar no Script "ModificadorDeValor" ja pode fazer confusão futuramente ja que fica
4 classes praticamente, Class habilit + o Scriptableobject, Class SCRIPTABLEACESS + ScriptableObject pode dar confusão isso
Bom Aceito sugestões
Ionick10- Iniciante
- PONTOS : 1933
REPUTAÇÃO : 0
Respeito as regras :
Re: [Duvida] Acesso a Classes no C#
Alguma ideia de como melhorar?
Ionick10- Iniciante
- PONTOS : 1933
REPUTAÇÃO : 0
Respeito as regras :
Re: [Duvida] Acesso a Classes no C#
Se você quer apeanas modificar valores, não bastaria deixar a classe pública e as variaveis dentro da classe públicas também?
Outra coisa, se só tem variáveis dentro da classe, por que usar class em vez de struct?
Outra coisa, se só tem variáveis dentro da classe, por que usar class em vez de struct?
Re: [Duvida] Acesso a Classes no C#
- Código:
int poder = 0;
public void SetPoder(int p){
poder = p;
}
public int GetPoder(){
return poder;
}
Script Player:
- Código:
public Habilidades habilidades;
void Update(){
habilidades.SetPoder(30);
}
printar valor "Poder":
- Código:
void Update(){
Debug.Log(acessandoscripts.habilit[0].GetPoder());
}
Tópicos semelhantes
» Dúvida sobre método de acesso as variáveis
» Dúvida sobre classes
» [Duvida] Como vizualizar classes no inspector ?
» Acesso a scripts de outra cena
» Como acesso uma variável em outro script?
» Dúvida sobre classes
» [Duvida] Como vizualizar classes no inspector ?
» Acesso a scripts de outra cena
» Como acesso uma variável em outro script?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos