Duvida sobre Array de componentes.
2 participantes
Página 1 de 1
Duvida sobre Array de componentes.
Gente tenha uma ideia de inventario. mas não de itens ou de objetos, mas de mecânicas, como super pulo, Combate, estava pensando em fazer isso em um Array, mas não consigo criar um Array, com componentes, estou em duvida se existe a alguma forma, ou eu devo continuar a usar componentes individuais.
Obrigado, Arthur!
Obrigado, Arthur!
Arthur07422- Iniciante
- PONTOS : 1717
REPUTAÇÃO : 3
Respeito as regras :
Re: Duvida sobre Array de componentes.
Não entendi muito bem a sua dúvida, mas se deseja criar um tipo específico para agregar outros subtipos (habilidade é o tipo e as habilidades em si são os subtipos) recomendo fazer uma interface:
E criar as classes das habilidades a partir disso, exemplos:
E outra:
E para criar a list das habilidades:
Criando as habilidades:
Mas para o que exatamente vc quer uma List assim?
- Código:
public interface ISkill{
void UseSkill();
}
E criar as classes das habilidades a partir disso, exemplos:
- Código:
public class Skill_DoubleJump : MonoBehaviour, ISkill{
public void UseSkill(){
// lógica para usar a skill...
}
}
E outra:
- Código:
public class Skill_Combat : MonoBehaviour, ISkill{
public void UseSkill(){
// toda a lógica...
}
}
E para criar a list das habilidades:
- Código:
List<ISkill> skills = new List<ISkill>();
Criando as habilidades:
- Código:
var skill_1 = new Skill_DoubleJump();
var skill_2 = new Skill_Combat();
skills.Add(skill_1);
skills.Add(skill_2);
Mas para o que exatamente vc quer uma List assim?
Re: Duvida sobre Array de componentes.
MayLeone escreveu:Não entendi muito bem a sua dúvida, mas se deseja criar um tipo específico para agregar outros subtipos (habilidade é o tipo e as habilidades em si são os subtipos) recomendo fazer uma interface:
- Código:
public interface ISkill{
void UseSkill();
}
E criar as classes das habilidades a partir disso, exemplos:
- Código:
public class Skill_DoubleJump : MonoBehaviour, ISkill{
public void UseSkill(){
// lógica para usar a skill...
}
}
E outra:
- Código:
public class Skill_Combat : MonoBehaviour, ISkill{
public void UseSkill(){
// toda a lógica...
}
}
E para criar a list das habilidades:
- Código:
List<ISkill> skills = new List<ISkill>();
Criando as habilidades:
- Código:
var skill_1 = new Skill_DoubleJump();
var skill_2 = new Skill_Combat();
skills.Add(skill_1);
skills.Add(skill_2);
Mas para o que exatamente vc quer uma List assim?
Entendi, seria um tipo de arvore de habilidades, a ideia e fazer um robô que possa acumular módulos, esses módulos darão características, como movimentação, pulo, etc... e o jogador deve procurar esse módulos para instalar no robô, assim aumentando adicionando novas mecânicas ao robô, como combate, zoom de câmera, pulo etc... Queria te uma certa quantidade de modulo, então queria otimizar utilizando um array, minha ideia era fazer um array de script, onde quando o jogador instalasse um módulo, o script principal, verificava nesse array qual script o jogador instalou, e adicionava um componente(script) no robô. Minha ideia era utilizar scripts para cada módulo, claro não se essa é a melhor forma, por isso que eu queria um array de script.
Arthur07422- Iniciante
- PONTOS : 1717
REPUTAÇÃO : 3
Respeito as regras :
Re: Duvida sobre Array de componentes.
Hmmmm saquei!
Sabe oq vc pode fazer? Usar um dicionário de skills e usar o addcomponent.
Faça as classes das habilidades assim como eu te disse, usa a interface, coloca a assinatura do método de usar a habilidade e cria as classe a partir disso, como te mostrei.
Agora cria o dicionário assim:
Até tem um jeito mais dinâmico de fazer isso, mas é mais complexo. Se tiver muitas habilidades vale a pena deixar dinâmico pra te poupar trabalho.
Agora supondo que o player ganhou a habilidade "DoubleJump", basta adicioná-la ao robô com o Addcomponent:
Agora ele tem o componente da classe "DoubleJump" que tem toda a lógica pra executar a habilidade.
Note que no dicionário o índice é uma string(chave) então vc pode achar a habilidade por um "nome", fica mais fácil que um array que eh por índice numérico.
Para o robô usar a habilidade, basta fazer:
Se deseja fazer uma alteração na assinatura do método."UseSkill", coloque para ele receber um parâmetro do tipo "GameObject" para poder receber informações do robô, caso ele precise saber de alguma informação no objeto em questão:
E usar:
Dessa forma vc evita o acoplamento.
Bom, acho que deu para entender, não eh?
Sabe oq vc pode fazer? Usar um dicionário de skills e usar o addcomponent.
Faça as classes das habilidades assim como eu te disse, usa a interface, coloca a assinatura do método de usar a habilidade e cria as classe a partir disso, como te mostrei.
Agora cria o dicionário assim:
- Código:
private Dictionary<string, ISkill> skills = New Dictionary<string, ISkill>();
//Adicionando a habilidade no dicionário:
skills.Add("Double Jump", Skill_DoubleJump);
skills.Add("Combat", Skill_Combat);
Até tem um jeito mais dinâmico de fazer isso, mas é mais complexo. Se tiver muitas habilidades vale a pena deixar dinâmico pra te poupar trabalho.
Agora supondo que o player ganhou a habilidade "DoubleJump", basta adicioná-la ao robô com o Addcomponent:
- Código:
this.gameObject.AddCompoment<skills["Double Jump"]>();
Agora ele tem o componente da classe "DoubleJump" que tem toda a lógica pra executar a habilidade.
Note que no dicionário o índice é uma string(chave) então vc pode achar a habilidade por um "nome", fica mais fácil que um array que eh por índice numérico.
Para o robô usar a habilidade, basta fazer:
- Código:
this.GetComponent<Skill_DoubleJump>().UseSkill();
Se deseja fazer uma alteração na assinatura do método."UseSkill", coloque para ele receber um parâmetro do tipo "GameObject" para poder receber informações do robô, caso ele precise saber de alguma informação no objeto em questão:
- Código:
public interface ISkill{
void UseSkill (UnityEngine.GameObject _gameObject);
}
E usar:
- Código:
this.GetComponent<Skill_DoubleJump>().UseSkill(this.gameObject);
Dessa forma vc evita o acoplamento.
Bom, acho que deu para entender, não eh?
Re: Duvida sobre Array de componentes.
MayLeone escreveu:Hmmmm saquei!
Sabe oq vc pode fazer? Usar um dicionário de skills e usar o addcomponent.
Faça as classes das habilidades assim como eu te disse, usa a interface, coloca a assinatura do método de usar a habilidade e cria as classe a partir disso, como te mostrei.
Agora cria o dicionário assim:
- Código:
private Dictionary<string, ISkill> skills = New Dictionary<string, ISkill>();
//Adicionando a habilidade no dicionário:
skills.Add("Double Jump", Skill_DoubleJump);
skills.Add("Combat", Skill_Combat);
Até tem um jeito mais dinâmico de fazer isso, mas é mais complexo. Se tiver muitas habilidades vale a pena deixar dinâmico pra te poupar trabalho.
Agora supondo que o player ganhou a habilidade "DoubleJump", basta adicioná-la ao robô com o Addcomponent:
- Código:
this.gameObject.AddCompoment<skills["Double Jump"]>();
Agora ele tem o componente da classe "DoubleJump" que tem toda a lógica pra executar a habilidade.
Note que no dicionário o índice é uma string(chave) então vc pode achar a habilidade por um "nome", fica mais fácil que um array que eh por índice numérico.
Para o robô usar a habilidade, basta fazer:
- Código:
this.GetComponent<Skill_DoubleJump>().UseSkill();
Se deseja fazer uma alteração na assinatura do método."UseSkill", coloque para ele receber um parâmetro do tipo "GameObject" para poder receber informações do robô, caso ele precise saber de alguma informação no objeto em questão:
- Código:
public interface ISkill{
void UseSkill (UnityEngine.GameObject _gameObject);
}
E usar:
- Código:
this.GetComponent<Skill_DoubleJump>().UseSkill(this.gameObject);
Dessa forma vc evita o acoplamento.
Bom, acho que deu para entender, não eh?
Sim, muito obrigado, foi muito importante a sua ajuda!
Arthur07422- Iniciante
- PONTOS : 1717
REPUTAÇÃO : 3
Respeito as regras :
Tópicos semelhantes
» (Dúvida) Setar ultima string de uma array
» Alterar componentes de todos os objeto de um array
» [Duvida] Decrescer uma Array.
» Duvida sobre array de gameobject
» (Duvida) Salvando array com playerprefs
» Alterar componentes de todos os objeto de um array
» [Duvida] Decrescer uma Array.
» Duvida sobre array de gameobject
» (Duvida) Salvando array com playerprefs
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos