Array de prefabs
4 participantes
Página 1 de 1
Array de prefabs
Eae galera, faz tempo que não posto nem um tópico aqui. Bom, é o seguinte, Eu estou desenvolvendo um jogo estilo o aquele do dinossauro do Google. Minha dívida é, tenho um script que uso para cada cactus da sena, quando ele ultrapassa uma certa distancia o script deve destruir o cactus e instanciar um abjeto aleatório de Array que possui todos os meus diferentes prefabs de cactus, mas o problema é o seguinte, como faço para não precisar definir a mão todos os objetos na minha array para cada cactus que tem o script ?
gurgelg752- MembroAvançado
- PONTOS : 2682
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: Array de prefabs
Poderia ser um pouco mais específico na sua dúvida? Não consegui entender direito?
Você não quer precisar linkar os objetos na Array, isso?
Você não quer precisar linkar os objetos na Array, isso?
Re: Array de prefabs
Basicamente eu queria uma variável que fosse publica, mas que quando eu linkase um objeto nela essa variável apareceria para todos os outro abjetos que tem essa variável. tipo uma variável global.MarcosSchultz escreveu:Poderia ser um pouco mais específico na sua dúvida? Não consegui entender direito?
Você não quer precisar linkar os objetos na Array, isso?
gurgelg752- MembroAvançado
- PONTOS : 2682
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: Array de prefabs
Para não precisar linkar os objetos no array no braço, vc pode fazer uma ''varredura'' dentro da pasta que contém os prefabs e pegar o nome desses arquivos e colocar dentro de um list.
Para fazer isso, basta referenciar essas bibliotecas:
Agora crie uma list do tipo string para armazenar os nomes dos prefabs na pasta.
Depois, dentro do método Start, por exemplo, vc vai criar uma instância do tipo "DirectoryInfo" e no construtor vc vai colocar o caminho do seu diretório (partindo do pressuposto que os cactus estão dentro da pasta de Resources chamada "Prefabs"):
Agora crie um array do tipo "FileInfo" para que vc possa pegar todos os arquivos no diretório referenciado, que contém a extensão ".prefab":
E agora vc pode fazer um foreach para adicionar na list chamada "arr" os nomes de todos os arquivos prefabs da pasta:
Lembrando que a parte que contém o "Replace" é para tirar a extensão ".prefab" do nome do arquivo e deixar apenas o nome do prefab.
Para instanciar um prefab direto da pasta sem precisar linkar eles num array, basta fazer o seguinte:
"gb" vai receber o arquivo que vai ser carregado do Resources.Load, de acordo com o nome de algum prefab na pasta aleatoriamente (por isso usei Random.Range como índice da lista de nomes), daí basta mandar instanciar 'gb' e você vai instanciar um prefab aleatório direto da pasta de prefabs, sem precisar linkar eles num array e depois randomizar.
O código completo é esse:
Espero que esse seja a sua dúvida.
Para fazer isso, basta referenciar essas bibliotecas:
- Código:
using System.Collections.Generic; // Para poder usar Lists
using System.IO; // Para poder usar a classe de Diretorios
Agora crie uma list do tipo string para armazenar os nomes dos prefabs na pasta.
Depois, dentro do método Start, por exemplo, vc vai criar uma instância do tipo "DirectoryInfo" e no construtor vc vai colocar o caminho do seu diretório (partindo do pressuposto que os cactus estão dentro da pasta de Resources chamada "Prefabs"):
- Código:
DirectoryInfo directory = new DirectoryInfo("Assets/Resources/Prefabs");
Agora crie um array do tipo "FileInfo" para que vc possa pegar todos os arquivos no diretório referenciado, que contém a extensão ".prefab":
- Código:
FileInfo[] info = directory.GetFiles ("*.prefab");
E agora vc pode fazer um foreach para adicionar na list chamada "arr" os nomes de todos os arquivos prefabs da pasta:
- Código:
foreach (FileInfo file in info) {
var name = file.Name.ToString ();
name = name.Replace (".prefab", "");
arr.Add (name);
}
Lembrando que a parte que contém o "Replace" é para tirar a extensão ".prefab" do nome do arquivo e deixar apenas o nome do prefab.
Para instanciar um prefab direto da pasta sem precisar linkar eles num array, basta fazer o seguinte:
- Código:
var gb = Resources.Load ("Prefabs/"+arr[Random.Range(0,arr.Count)], typeof(GameObject)) as GameObject;
Instantiate (gb, Vector3.zero, Quaternion.identity);
"gb" vai receber o arquivo que vai ser carregado do Resources.Load, de acordo com o nome de algum prefab na pasta aleatoriamente (por isso usei Random.Range como índice da lista de nomes), daí basta mandar instanciar 'gb' e você vai instanciar um prefab aleatório direto da pasta de prefabs, sem precisar linkar eles num array e depois randomizar.
O código completo é esse:
- Código:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class GetTheFiles : MonoBehaviour {
List<string> arr = new List<string> ();
void Start () {
DirectoryInfo directory = new DirectoryInfo("Assets/Resources/Prefabs");
FileInfo[] info = directory.GetFiles ("*.prefab");
foreach (FileInfo file in info) {
var name = file.Name.ToString ();
name = name.Replace (".prefab", "");
arr.Add (name);
}
var gb = Resources.Load ("Prefabs/"+arr[Random.Range(0,arr.Count)], typeof(GameObject)) as GameObject;
Instantiate (gb, Vector3.zero, Quaternion.identity);
}
}
Espero que esse seja a sua dúvida.
Re: Array de prefabs
gurgelg752 escreveu:Basicamente eu queria uma variável que fosse publica, mas que quando eu linkase um objeto nela essa variável apareceria para todos os outro abjetos que tem essa variável. tipo uma variável global.MarcosSchultz escreveu:Poderia ser um pouco mais específico na sua dúvida? Não consegui entender direito?
Você não quer precisar linkar os objetos na Array, isso?
Hm, então não deve ser a minha resposta anterior.
Se eu entendi direito, vc quer um array que contém todos os cactus e q esse array seja público para todas as classes?
Se for isso, basta colocar esse array como público e estático:
- Código:
public static GameObject[] myArray;
Para acessar esse array externamente basta fazer:
- Código:
NomeDaClasseQueTemOArray.myArray;
Re: Array de prefabs
Pois é, tinha tentado fazer isso, mas tive outra dúvida, como faço para colocar os prefabs nessa variável estática ?MayLeone escreveu:gurgelg752 escreveu:Basicamente eu queria uma variável que fosse publica, mas que quando eu linkase um objeto nela essa variável apareceria para todos os outro abjetos que tem essa variável. tipo uma variável global.MarcosSchultz escreveu:Poderia ser um pouco mais específico na sua dúvida? Não consegui entender direito?
Você não quer precisar linkar os objetos na Array, isso?
Hm, então não deve ser a minha resposta anterior.
Se eu entendi direito, vc quer um array que contém todos os cactus e q esse array seja público para todas as classes?
Se for isso, basta colocar esse array como público e estático:
- Código:
public static GameObject[] myArray;
Para acessar esse array externamente basta fazer:
- Código:
NomeDaClasseQueTemOArray.myArray;
gurgelg752- MembroAvançado
- PONTOS : 2682
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: Array de prefabs
okMayLeone escreveu:Do jeito que eu mostrei acima funciona.
gurgelg752- MembroAvançado
- PONTOS : 2682
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: Array de prefabs
MayLeone vc é um monstro??? kkkkkk brincadeira
Pelo que entendi: Você tem vários prefabs (tipos de cactus) e quer instanciá-los aleatóriamente na posição que vc determinar.
Talvez sei tanto quanto vc, mas eu tentaria da seguinte maneira:
public GameObject[] cactusPrefab; //Na unity vc define o tamanho da array e vai arrastando os prefabs para o script do gameObject.
já dentro do script, na função pra chamar o prefab vc faz o seguinte(exemplo de 3 prefabs):
Instantiate (cactusPrefab [Mathf.FloorToInt(Random.value*3)], local1.transform.position, local1.transform.rotation);
a parte "(Random.value*3)" será para gerar um número aleatório (irá definir qual prefab será instanciado),
a parte "Mathf.FloorToInt" será para converter esse número quebrado em um inteiro, arredondando pra baixo,
esse "local1" é onde tá o gameObject no cenário do seu jogo onde irá surgir o prefab,
Boa sorte!
Pelo que entendi: Você tem vários prefabs (tipos de cactus) e quer instanciá-los aleatóriamente na posição que vc determinar.
Talvez sei tanto quanto vc, mas eu tentaria da seguinte maneira:
public GameObject[] cactusPrefab; //Na unity vc define o tamanho da array e vai arrastando os prefabs para o script do gameObject.
já dentro do script, na função pra chamar o prefab vc faz o seguinte(exemplo de 3 prefabs):
Instantiate (cactusPrefab [Mathf.FloorToInt(Random.value*3)], local1.transform.position, local1.transform.rotation);
a parte "(Random.value*3)" será para gerar um número aleatório (irá definir qual prefab será instanciado),
a parte "Mathf.FloorToInt" será para converter esse número quebrado em um inteiro, arredondando pra baixo,
esse "local1" é onde tá o gameObject no cenário do seu jogo onde irá surgir o prefab,
Boa sorte!
Nalfam- MembroAvançado
- PONTOS : 2435
REPUTAÇÃO : 32
Áreas de atuação : Unity
Respeito as regras :
Re: Array de prefabs
Nalfam escreveu:MayLeone vc é um monstro??? kkkkkk brincadeira
Pelo que entendi: Você tem vários prefabs (tipos de cactus) e quer instanciá-los aleatóriamente na posição que vc determinar.
Talvez sei tanto quanto vc, mas eu tentaria da seguinte maneira:
public GameObject[] cactusPrefab; //Na unity vc define o tamanho da array e vai arrastando os prefabs para o script do gameObject.
já dentro do script, na função pra chamar o prefab vc faz o seguinte(exemplo de 3 prefabs):
Instantiate (cactusPrefab [Mathf.FloorToInt(Random.value*3)], local1.transform.position, local1.transform.rotation);
a parte "(Random.value*3)" será para gerar um número aleatório (irá definir qual prefab será instanciado),
a parte "Mathf.FloorToInt" será para converter esse número quebrado em um inteiro, arredondando pra baixo,
esse "local1" é onde tá o gameObject no cenário do seu jogo onde irá surgir o prefab,
Boa sorte!
Eu acho mais fácil usar a penas o Random.Range(0,Array.length), dai nem precisa do Mathf.FloorToInt
gurgelg752- MembroAvançado
- PONTOS : 2682
REPUTAÇÃO : 19
Áreas de atuação : estudo programação c# nas horas vagas
Respeito as regras :
Re: Array de prefabs
- Spoiler:
gurgelg752Nalfam escreveu:MayLeone vc é um monstro??? kkkkkk brincadeira
Pelo que entendi: Você tem vários prefabs (tipos de cactus) e quer instanciá-los aleatóriamente na posição que vc determinar.
Talvez sei tanto quanto vc, mas eu tentaria da seguinte maneira:
public GameObject[] cactusPrefab; //Na unity vc define o tamanho da array e vai arrastando os prefabs para o script do gameObject.
já dentro do script, na função pra chamar o prefab vc faz o seguinte(exemplo de 3 prefabs):
Instantiate (cactusPrefab [Mathf.FloorToInt(Random.value*3)], local1.transform.position, local1.transform.rotation);
a parte "(Random.value*3)" será para gerar um número aleatório (irá definir qual prefab será instanciado),
a parte "Mathf.FloorToInt" será para converter esse número quebrado em um inteiro, arredondando pra baixo,
esse "local1" é onde tá o gameObject no cenário do seu jogo onde irá surgir o prefab,
Boa sorte!
Eu acho mais fácil usar a penas o Random.Range(0,Array.length), dai nem precisa do Mathf.FloorToInt
Agora q vc falou... tbm acho mais fácil srsrsr
mas a MayLeone fkou inspirada e criou um tópico ensinando muitas coisas por causa dessa sua dúvida! Tbm tenho q te agradecer.
Pq além desse "Mathf.FloorToInt", uso várias linhas de comandos relacionados a prefab que agora podem ser melhoradas
vlw
Nalfam- MembroAvançado
- PONTOS : 2435
REPUTAÇÃO : 32
Áreas de atuação : Unity
Respeito as regras :
Tópicos semelhantes
» Buscar o índice de um array que está dentro de outro array (JavaScript)
» [RESOLVIDO] Array, colocar varios vector3 em uma array por script
» AJUDA NOS PREFABS
» Definir valores de uma array com outra array em sequência
» Combinar prefabs?!?
» [RESOLVIDO] Array, colocar varios vector3 em uma array por script
» AJUDA NOS PREFABS
» Definir valores de uma array com outra array em sequência
» Combinar prefabs?!?
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos