Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
2 participantes
Página 1 de 1
Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
Olá pessoal,
Sou novo com unity e estou tentando resolver um problema para tentar avançar no meu primeiro projeto(um infinity runner) basiquinho. Irei gerar alguns objetos no cenário que valem pontos para o personagem ir coletando. Tive a ideia de gerar uma palavra randomicamente para tentar spawnar as letras dessa palavra. Gerar a palavra randomicamente foi fácil, o problema é spawnar cada uma dessas letras da palavra em um intervalo de 1 minuto e é nessa parte que preciso de ajuda. A lógica que eu estou tentando fazer é a seguinte: Eu criei um método que pega a palavra e coloca cada letra em um array, segue um trecho do método:
Ai fiz esse esquema até a letra Z.
Dentro de cada break eu estou chamando um método em outra classe que recebe o indiceLetra para tentar spawnar as letras, segue a classe:
public class SpawnLetters : MonoBehaviour {
Nesse vetor de GameObject eu linkei com os prefabs de todas as letras(da letra A até a letra Z), A partir daqui não conseguir mais evoluir, eu acho que essa lógica não está legal mais estou sem ideia de como spawnar as letras da palavra gerada a cada 1 minuto.
OBS: Do jeito que está agora eu consigo spawnar somente a primeira letra do vetor e sempre no mesmo lugar.
Espero que alguém possa me ajudar e agradeço desde já.
Sou novo com unity e estou tentando resolver um problema para tentar avançar no meu primeiro projeto(um infinity runner) basiquinho. Irei gerar alguns objetos no cenário que valem pontos para o personagem ir coletando. Tive a ideia de gerar uma palavra randomicamente para tentar spawnar as letras dessa palavra. Gerar a palavra randomicamente foi fácil, o problema é spawnar cada uma dessas letras da palavra em um intervalo de 1 minuto e é nessa parte que preciso de ajuda. A lógica que eu estou tentando fazer é a seguinte: Eu criei um método que pega a palavra e coloca cada letra em um array, segue um trecho do método:
- Código:
public void addPalavraArray(string palavra){
char[] letra = palavra.ToCharArray();
spawnLetters = FindObjectOfType(typeof(SpawnLetters)) as SpawnLetters;
// aqui eu coloco as letras da palavra gerada dentro de um array, falta instanciar as letras, não está dando certo.
for(int i = 0; i < letra.Length; i++){
switch(letra[i]){
case 'a':
if(!controleSpawnLetras){
indiceLetra = 0;
spawnLetters.spawn(indiceLetra);
}
break;
case 'b':
if(!controleSpawnLetras){
indiceLetra = 1;
spawnLetters.spawn(indiceLetra);
}
break;
Ai fiz esse esquema até a letra Z.
Dentro de cada break eu estou chamando um método em outra classe que recebe o indiceLetra para tentar spawnar as letras, segue a classe:
public class SpawnLetters : MonoBehaviour {
- Código:
public GameObject[] spawnLetter;
private GameController gameController;
void Start () {
gameController = FindObjectOfType(typeof(GameController)) as GameController;
}
void Update () {
}
public void spawn(int indiceLetra){
GameObject tempSpawnLetters = Instantiate(spawnLetter[indiceLetra]) as GameObject;
tempSpawnLetters.transform.parent = this.transform;
float y = tempSpawnLetters.transform.position.y;
tempSpawnLetters.transform.position = new Vector3(y,transform.position.y ,transform.position.z);
}
}
Nesse vetor de GameObject eu linkei com os prefabs de todas as letras(da letra A até a letra Z), A partir daqui não conseguir mais evoluir, eu acho que essa lógica não está legal mais estou sem ideia de como spawnar as letras da palavra gerada a cada 1 minuto.
OBS: Do jeito que está agora eu consigo spawnar somente a primeira letra do vetor e sempre no mesmo lugar.
Espero que alguém possa me ajudar e agradeço desde já.
Última edição por Shynayder em Seg Jul 18, 2016 9:17 pm, editado 1 vez(es)
Shynayder- Iniciante
- PONTOS : 3056
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
bom primeiro coloque seu código dentro da caixa de código
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
Desculpa, como sou novato não sei muito bem as regras.
Shynayder- Iniciante
- PONTOS : 3056
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
mantendo essa sua lógica oque vc poderia fazer e uma lista com as letras para ser instanciadas e usar um for e o ienumerator para controlar o tempo de cada letra
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
Opa boa noite,
Mas esse vetor de GameObject chamado spawnLetter já possui os prefabs associados para spawnar as letras. Isso não é suficiente?
Se executar o projeto nesse esquema ai ele spawna sempre a primeira letra. Eu já debuguei, mas não consegui encontrar o problema. Os valores inclusive são passados para método que spawna, mas por algum motivo ele só pega a primeira letra.
Mas esse vetor de GameObject chamado spawnLetter já possui os prefabs associados para spawnar as letras. Isso não é suficiente?
Se executar o projeto nesse esquema ai ele spawna sempre a primeira letra. Eu já debuguei, mas não consegui encontrar o problema. Os valores inclusive são passados para método que spawna, mas por algum motivo ele só pega a primeira letra.
Shynayder- Iniciante
- PONTOS : 3056
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
bom interessante seria vc usar lista com um tipo de classe
guardando uma variável do tipo char para guarda a letra e outro do tipo sprite para guarda a sprite da letra ou ate mesmo Do Tipo GameObject mais no caso a Sprite seria melhor evitando criar vários prefabs
com sprite basta trocar a sprite do GameObject mais no caso se for em 3D teria que ser GameObject mesmo
e uma outra lista para guarda a letras que serão instanciadas
assim ficaria mais simples fazer a seleção de cada letra usando o foreach ou a te mesmo linq ou for etc
crie uma variável do tipo string para guarda a palavra ou algo do gênero
usando linq para pegar cada letra que esta na lista
assim basta instanciar a cada índice da lista letterPhrase
criando um método do tipo IEnumerator para instanciar
guardando uma variável do tipo char para guarda a letra e outro do tipo sprite para guarda a sprite da letra ou ate mesmo Do Tipo GameObject mais no caso a Sprite seria melhor evitando criar vários prefabs
com sprite basta trocar a sprite do GameObject mais no caso se for em 3D teria que ser GameObject mesmo
- Código:
[System.Serializable]
public class InfoLetter
{
public char letter;
public Sprite spriteLetter;
}
- Código:
public List<InfoLetter> allLetter;
e uma outra lista para guarda a letras que serão instanciadas
- Código:
public List<InfoLetter> letterPhrase;
assim ficaria mais simples fazer a seleção de cada letra usando o foreach ou a te mesmo linq ou for etc
crie uma variável do tipo string para guarda a palavra ou algo do gênero
- Código:
public string phrase = "hello word";
usando linq para pegar cada letra que esta na lista
- Código:
List<char> cLetter = new List<char>();
cLetter.AddRange(phrase.ToCharArray());
for (int i = 0; i < cLetter.Count; i++)
{
var letter = from readList in allLetter
where readList.letter == cLetter[i]
select readList;
InfoLetter newInfoLetter = letter.ElementAt<InfoLetter>(0);
letterPhrase.Add(newInfoLetter);
}
assim basta instanciar a cada índice da lista letterPhrase
criando um método do tipo IEnumerator para instanciar
- Código:
private IEnumerator InstantiateLetter()
{
for (int i = 0; i < letterPhrase.Count; i++)
{
yield return new WaitForSeconds(5);//tempo que vai esperar para continuar interação do loop
int index = Random.Range(0, letterPhrase.Count);
GameObject letter = Instantiate(prefab) as GameObject;
letter.GetComponent<SpriteRenderer>().sprite = letterPhrase[index].spriteLetter;
letterPhrase.RemoveAt(index);
}
}
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
Nesse último código da linha 8, o que significa esse prefab entre parenteses?
Shynayder- Iniciante
- PONTOS : 3056
REPUTAÇÃO : 0
Idade : 37
Respeito as regras :
Re: Como spawnar as letras de uma palavra que foi gerada randomicamente em um determinado intervalo de tempo
e um game GameObject com SpriteRenderer
Weslley- Moderador
- PONTOS : 5727
REPUTAÇÃO : 744
Idade : 26
Áreas de atuação : Inversión, Desarrollo, Juegos e Web
Respeito as regras :
Tópicos semelhantes
» [Resolvido]Como fais para dar um determinado tempo em um script
» O jogo acaba depois de um determinado tempo
» SPAWNAR OBJETOS EM DETERMINADO LUGAR
» Pressionar Botão por um determinado tempo
» O jogo acaba depois de um determinado tempo
» O jogo acaba depois de um determinado tempo
» SPAWNAR OBJETOS EM DETERMINADO LUGAR
» Pressionar Botão por um determinado tempo
» O jogo acaba depois de um determinado tempo
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos