SchultzGames
Para tirar dúvidas, crie um tópico especifico na área "Dúvidas em Geral" e aguarde ser respondido. Evite comentar em tópicos não relacionados a sua dúvida :D
TÓPICOS RECENTES:
Tópico:
Postado em:
Postado por:
new Vector3 (o que ele ta fazendo de errado??)(iniciante)
Blander ao juntar algumas partes ficam mais escuro
[TUTORIAL] Sistema de Controlador De Primeira Pessoa Com Som De Passos Aleatorios
[TUTORIAL] AI Enemy ( Jogos de terror )
Retornar um resultado de pagina PHP com texto formatado
[JOGO] Mega BombermOn - Pokémon + Bomberman
Como Voltar o Player para o Início usando Trigger? C#
Unity - Deslizar Para Rotacionar o 'Personagem'
Como criar um poligono dinamicamente?
Instantiate
Em busca de um modelador 3D para plataforma educacional (Já ganhamos apoio de faculdades)
Armazenar as informações de um botão e duplica-lo
História que eu fiz na hora vaga.
Nao consigo loga no banco de dados no mobile usando Mysql e PHP
[TUTORIAL] Banco de dados || MySQL
IA de turret
Tem como deixar a Layer do objeto branca?
[TUTORIAL] Baixando roupas e alvos para MakeHuman
Drop Shadows
[RESOLVIDO] rotação no exio z
Importe objeto do blender
Erro ao compilar para IOS
Jogo 2D unity - trocar sprite ao apertar botão
Bug/Erro da unity?
Unity + MySQL
Erro de Prefab quando realiza o Build de um projeto 3D
[TUTORIAL] Unity 5 - Sistema Completo de PORTAS E CHAVES
movimento de uma nave
sombras para jogos mobile
o q vcs acham??
[Duvida] Bug ao usar Vector3.Lerp Objeto é teleportado na lata
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
Download grátis de ônibus brasileiros - Millennium II Piso Baixo Central
[Devlog] Lost in the world 14/11
Discord para desenvolvimento de jogos
[TUTORIAL] Controle 3ª pessoa com animações mecânicas (root motion)
(UNITY) Erro ao compilar a Build Android
[RESOLVIDO]Como aplicar textura trânsparente na unity
Unity 3D - Desenhos Com Física(Download Projeto)
Como mudar o CONTROLLER do ANIMATOR
[RESOLVIDO] erro no unity
Problema ao rotacionar valores negativos.
Calcular hora ?
Novo estilo de estourar blocos, baixe meu jogo pessoal ... conto com a ajuda de vocês!!!
Jogo que fiz para uma Jam da minha faculdade FATEC Ourinhos.
Não consigo o Android SDK!!
[RESOLVIDO] Como faço para depois de determinado tempo acontecer algo?
CRASH AO ENTRAR NA CENA UNITY
estou procurando um bom tutorial de IA Basica
Erro ao colocar script no botão
Novo jogo em desenvolvimento, 13º andar
Text Dinâmico no botão
[TUTORIAL] Sistema Pdv, Mercado, Padaria, Conveniência, Lojas Em Geral - C# VISUAL STUDIO
[TUTORIAL] - Script de lanterna pra seu jogo de terror e outros...
[RESOLVIDO] Unity - Reproduzir Videos Do Blender No Unity
Ordem de fases
[RESOLVIDO] Tenho algum erro de simbolo no script do carro o que poderia ser?
[RESOLVIDO] Dúvida. Detectar colisões nas instâncias
erro na minha IA
[TUTORIAL] While, como funciona?
Mostrar a contagem em 10K e 100M
[TUTORIAL] AI Enemy 2.0 + animações ( Jogos de terror )
Cores nos materiais sem criar material
Poderia modelar um personagem cartoon para meu projeto
Como coloco modo de criação de personagem?
[Ajuda] Assets
RayCasting + Disparo Um Bom Tipo De Video Aula.
Ajuda de Blender para Unity
Procuro Equipe Para Criação de Jogo [PAGO]
[RESOLVIDO] erro WaterBaseEditor.cs não encontra o caminho do WaterBase
[TUTORIAL] Criar Analógico Virtual UI Para Mobile.
[TUTORIAL] Acessar nomes de arquivos diretamente da pasta
Objeto dentro do player nao ta rotacioando
[TUTORIAL] MENU PRINCIPAL - UNITY 5 (5.3 ou superior) (Com UI)
Array de prefabs
screenshot
instancia item aleatorio em varias posicoes
[TUTORIAL] Mira que fica se movendo (ocilando,tremendo,etc)
Getcomponent de C# para java
Curso barato de C#
Unity - Modelo 3D em Menu 2D
[RESOLVIDO] Camera Estilo Showroom
A um mês com unity bugado sem resposta
[GameJam] Competição organizada pela BitCodeStudios
Pegar strings de "duas em duas"
criar um piano no unity
Movimentação
Instanciar objeto onde cricar com mouse ou touch
Dúvida Sistema de Energia para jogo android
[RESOLVIDO] Inimigo patrulhando constantemente estilo mario
BUG UNITY 3D ROSA A SCENE E GAME
Dúvida. Colliders no Unity3D
Pq a grama do Unity é tao pesada?
Alguem cria uma conta na playstore pra mim? :(
Capture Panorama?
Artistas 3D e Programadores Unity3D (Remunerado)
Input Get Key
SCHULTZ Jogo de terror
(Erro) IndexOutOfRangeException:Array index is out of range
Ontem à(s) 10:58 pm
Ontem à(s) 6:36 pm
Ontem à(s) 4:07 pm
Ontem à(s) 2:37 pm
Ontem à(s) 12:58 pm
Ontem à(s) 11:19 am
Seg Nov 19, 2018 11:11 pm
Seg Nov 19, 2018 7:47 pm
Seg Nov 19, 2018 7:42 pm
Seg Nov 19, 2018 2:46 pm
Seg Nov 19, 2018 1:48 pm
Seg Nov 19, 2018 11:40 am
Seg Nov 19, 2018 1:05 am
Dom Nov 18, 2018 11:35 pm
Dom Nov 18, 2018 11:20 pm
Dom Nov 18, 2018 11:18 pm
Dom Nov 18, 2018 11:13 pm
Dom Nov 18, 2018 2:16 am
Dom Nov 18, 2018 12:38 am
Sab Nov 17, 2018 11:31 pm
Sab Nov 17, 2018 11:20 pm
Sab Nov 17, 2018 11:16 pm
Sab Nov 17, 2018 11:13 pm
Sab Nov 17, 2018 11:11 pm
Sab Nov 17, 2018 11:04 pm
Sab Nov 17, 2018 11:03 pm
Sab Nov 17, 2018 11:00 pm
Sab Nov 17, 2018 10:55 pm
Sab Nov 17, 2018 2:50 pm
Sab Nov 17, 2018 1:31 pm
Sab Nov 17, 2018 11:12 am
Sab Nov 17, 2018 10:31 am
Sex Nov 16, 2018 3:50 pm
Sex Nov 16, 2018 11:23 am
Qui Nov 15, 2018 4:59 pm
Qui Nov 15, 2018 3:23 pm
Qua Nov 14, 2018 5:44 pm
Qua Nov 14, 2018 1:25 pm
Qua Nov 14, 2018 10:45 am
Ter Nov 13, 2018 11:25 pm
Ter Nov 13, 2018 11:18 pm
Ter Nov 13, 2018 5:55 pm
Ter Nov 13, 2018 1:30 pm
Ter Nov 13, 2018 11:33 am
Seg Nov 12, 2018 9:52 pm
Seg Nov 12, 2018 3:57 pm
Seg Nov 12, 2018 3:24 pm
Seg Nov 12, 2018 8:13 am
Seg Nov 12, 2018 8:11 am
Dom Nov 11, 2018 6:56 pm
Dom Nov 11, 2018 2:41 pm
Dom Nov 11, 2018 8:12 am
Dom Nov 11, 2018 7:57 am
Sab Nov 10, 2018 8:54 pm
Sab Nov 10, 2018 5:11 pm
Sab Nov 10, 2018 2:52 pm
Sab Nov 10, 2018 2:13 pm
Sab Nov 10, 2018 12:39 am
Sab Nov 10, 2018 12:28 am
Sex Nov 09, 2018 3:56 pm
Qui Nov 08, 2018 11:28 pm
Qui Nov 08, 2018 11:25 pm
Qui Nov 08, 2018 10:01 pm
Qui Nov 08, 2018 7:47 pm
Qui Nov 08, 2018 12:36 pm
Qui Nov 08, 2018 12:31 pm
Qui Nov 08, 2018 12:28 pm
Qui Nov 08, 2018 12:53 am
Qua Nov 07, 2018 5:52 pm
Qua Nov 07, 2018 12:49 pm
Ter Nov 06, 2018 2:05 pm
Ter Nov 06, 2018 12:30 pm
Ter Nov 06, 2018 11:32 am
Ter Nov 06, 2018 1:10 am
Seg Nov 05, 2018 6:57 pm
Seg Nov 05, 2018 3:36 pm
Seg Nov 05, 2018 12:44 am
Dom Nov 04, 2018 5:32 pm
Dom Nov 04, 2018 5:31 pm
Dom Nov 04, 2018 5:30 pm
Dom Nov 04, 2018 1:05 am
Sab Nov 03, 2018 1:36 pm
Sex Nov 02, 2018 11:38 pm
Sex Nov 02, 2018 10:55 pm
Sex Nov 02, 2018 8:16 pm
Sex Nov 02, 2018 7:50 pm
Sex Nov 02, 2018 7:41 pm
Sex Nov 02, 2018 7:27 pm
Sex Nov 02, 2018 6:36 pm
Sex Nov 02, 2018 3:27 pm
Sex Nov 02, 2018 3:35 am
Sex Nov 02, 2018 3:24 am
Qui Nov 01, 2018 3:56 pm
Qui Nov 01, 2018 3:52 pm
Qui Nov 01, 2018 1:18 pm
Qui Nov 01, 2018 7:57 am
Qui Nov 01, 2018 2:26 am
Qui Nov 01, 2018 2:05 am
Qua Out 31, 2018 9:20 pm
NKKF
diegopds
Simplizãum S
ArysonSantos
Jmspp
dstaroski
gonzaga
Magnatah
conceptfac
francisco barroso
rZwr
MayLeone
SuperGamer
sabbath
sabbath
MarcosSchultz
MarcosSchultz
Callyde Jr
NKKF
theus.mors
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
marcos4503
Daniel Pires da Silva
francisco barroso
Weslley
SuperGamer
Mateus2583
JohnRambo
francieljesus
sabbath
TioUV
JohnRambo
MarcosSchultz
MarceloYBP
Weslley
Callyde Jr
hamerom
luansantos
francisco barroso
Vitor Paulino
dstaroski
dstaroski
SuperGamer
Patrick
dstaroski
dstaroski
SuperGamer
Magnatah
francisco barroso
Samuelostgamer
GattiMene
MarceloYBP
SuperGamer
Tegh
francisco barroso
NKKF
GameLACK
dstaroski
dstaroski
dstaroski
jack2117
Mathss
Daniel Dória
JohnRambo
gurgelg752
francisco barroso
MarcosSchultz
Nalfam
dstaroski
MarcosSchultz
dstaroski
dstaroski
dstaroski
Magnatah
Teio
Callyde Jr
hetrodo
NKKF
CarlosDT94
MarcosSchultz
MarcosSchultz
Magnatah
MrMattD
MarcosSchultz
MarcosSchultz
francisco barroso
francisco barroso
Callyde Jr
Dom3000
MarcosSchultz
MarcosSchultz
francisco barroso

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Ir em baixo

TUTORIAL [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por MayLeone em Sab Nov 03, 2018 3:09 pm


Introdução:
Olá! Bem vindos a mais um tutorial aqui no blog! Hoje irei mostrar como você pode ter acesso aos nomes dos arquivos de assets dentro do seu projeto, assim você vai poder armazená-los numa lista para poder usá-los posteriormente.

A ideia de criar este tutorial veio de uma dúvida postada aqui no fórum, na verdade a pessoa apenas queria saber como adicionar prefabs num array sem precisar anexá-los manualmente através do inspector, mas o tutorial de hoje vai não só apenas mostrar como carregar prefabs diretamente da pasta, mas também qualquer asset que você quiser.

Anexando arquivos manualmente:
Antes de mostrar o tutorial, vamos entender como o processo é feito "manualmente" dentro da Unity.
Digamos que você tenha um array do tipo GameObject chamado "objects" e nele você deseja armazenar os prefabs do seu jogo para então poder instanciá-los aleatoriamente na cena.
Para tal, você colocou os prefabs dentro de uma pasta chamada "Prefabs" e então irá anexá-los um por um diretamente no inspector dentro do array "objects":



Agora com os prefabs anexados você pode instanciar algum deles aleatoriamente através do script:




Veja que essa é a forma mais simples de poder instanciar aleatoriamente um prefab na cena do jogo.
Mas digamos que você queira adicionar um novo prefab a ser instanciado, neste caso você terá que adicionar esse novo prefab no array pelo inspector. Caso queira deletar algum prefab já adicionado no array, você terá um erro se não desassociá-lo corretamente no script ou no inspector, ou caso queria que algum prefab seja adicionado em tempo de execução dentro do array, da forma como o script se encontra é praticamente impossível. Outra ação que não podemos realizar primariamente é adicionar mais elementos ao array através do inspector se ele for estatico (static).
Veja então que a manutenção e dinamização do código estão precárias. Para resolver este impasse nós podemos carregar arquivos diretamente da pasta através do método "Resources.Load()".

Resources.Load:
Esse método genérico pode nos auxiliar a carregar recursos diretamente da pasta aonde eles se encontram, assim podemos adicionar os prefabs dentro do array diretamente da pasta sem precisar anexá-los pelo inspector. 
Isso resolveria o nosso problema com relação ao ''static'' e a poder adicionar elementos em tempo de execução.
Para usar o método é bem simples: Basta que a pasta com os arquivos que você deseja carregar estejam dentro de uma subpasta de "Assets" chamada "Resources", e então para manipular os arquivos via script basta referenciar o caminho do arquivo (o diretório de pasta + o nome do asset) e o tipo do arquivo a ser carregado, por exemplo:



Se você testar o código acima verá que ele vai funcionar da mesma forma que antes, só que agora o array "objects" é privado, então não anexamos os prefabs através do inspector, mas sim com a utilização do método Resources.Load.

Veja que o argumento passado para o método é justamente o caminho onde o arquivo está (no meu caso numa pasta chamada "Prefabs") e depois o nome do arquivo. Também note que o tipo usado aqui é o "GameObject" por se tratar de prefabs.

Mas agora você deve pensar... "Como eu faria para adicionar esses recursos diretamente da pasta no meu array, mas sem precisar ficar toda hora especificando o seu nome?" É aí que entra o nosso tutorial, acompanhe:

Obtendo nome dos arquivos:
Agora que entendeu o ponto central do nosso tutorial podemos finalmente começar:
Crie um novo C# script com o nome "FilesName" e delete tudo nele, apenas referencie as bibliotecas: System.Collections (para podermos utilizar arrays), System.Collections.Generic (para podemos utilizar lists) e System.IO (para podermos usar classes de acesso a diretórios de pastas):




Agora crie uma classe estática e pública com o mesmo nome do arquivo criado, ou seja, "FilesName".
Dentro dessa classe vamos criar um método público, estático, que retornará uma list de strings chamado "GetFilesNames", recebendo como parâmetro duas strings, uma chamada "path" (caminho do arquivo) e o outra chamada "extension" (para receber a extensão do arquivo):


O que faremos é o seguinte: esse método irá ter acesso à pasta que contém os arquivos que queremos acessar os nomes, e então ele vai adicionar todos os nomes desses arquivos em uma list de strings que será retornada do método.

Para fazer acesso ao diretório da pasta, basta utilizar um objeto do tipo "DirectoryInfo" e dentro do seu construtor passar o diretório (caminho) da pasta dos arquivos desejados.
Após isso, vamos criar uma variável que receba todos os arquivos que estão contidos naquele diretório, para isso, basta utilizar o método "GetFiles" da instância de "DirectoryInfo". Esse método retorna um array do tipo "FileInfo":


Para garantir que apenas seja retornado arquivos de um único tipo (por exemplo, retornar apenas arquivos com extensão do tipo .prefab) passe como argumento de "GetFiles" a extensão desejada:



Nesse momento, estamos armazenando dentro do array "infos" todos os arquivos do diretório referenciado, então, podemos realizar um foreach dentro deste array:
Antes disso, crie uma list local do tipo string com o nome de "names".
Após fazer isso, faça com que o laço foreach percorra o array "infos":



Dentro do laço crie uma variável local chamada "name" e nela armazene o nome do arquivo através da propriedade "Name".
Para "apagar" a extensão do arquivo no nome (que não é solicitado pelo ResourcesLoad) utilize o método "Replace".
Após tudo isso, adicione "name" na list "names" e no final do laço retorne essa list (se quiser pode adicionar tags de explicações do script com XML summary):



Salve o script.

Utilizando o script:
Para utilizar o nosso script, basta criar um array do tipo string e chamar nosso método "GetFilesNames" passando como argumento o caminho da pasta onde os arquivos se encontram e a extensão dos mesmos:


Agora dentro do array "namesFiles" você tem todos os nomes de todos os arquivos da pasta "Prefabs" que são do tipo ".prefab".
Nesse momento, basta utilizar o Resources.Load como vínhamos fazendo, mas agora quando devemos referenciar o nome do arquivo, podemos utilizar o array "namesFiles" diretamente:


Veja que ao salvar o script e executá-lo, um prefab será instanciado na cena, sem que você precise anexá-los pelo inspector ou ficasse especificando seus nomes.
Agora se você adicionar ou remover prefabs da pasta não precisará alterar nada no script, também poderá manipular esses elementos se o array for estático ou privado e instanciar prefabs em tempo de execução, tudo isso utilizando nosso método "GetFilesNames"!

Veja que esse método não é eficiente apenas para prefabs/gameobjects, você pode utilizar para randomizar um material de um elemento também:


Os materiais que tenho na pasta "Materials" são bem simples:


Note que cada vez que você roda o teste, o elemento muda de cor aleatoriamente:


Finalização:
E aqui chega o fim de mais um tutorial do blog! Espero que tenham gostado e que este método seja útil para você em algum momento de seu desenvolvimento. Até a próxima!
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 580
REPUTAÇÃO : 175
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras :

Ver perfil do usuário http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por NKKF em Sab Nov 03, 2018 3:24 pm

Wow, May, sabe se dá para fazer isso com Cenas/sprites também?
avatar
NKKF
ProgramadorMaster

Masculino PONTOS : 2045
REPUTAÇÃO : 409
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras :

Ver perfil do usuário http://www.projetounity.esy.es

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por MayLeone em Sab Nov 03, 2018 3:41 pm

Sim, dá para fazer com qualquer objeto/asset que esteja numa pasta do jogo, basta mudar a extensão e o diretório da pasta (colocar o caminho correto)
Para sprites ficaria assim:

Código:
string[] spritesNames = FilesName.GetFilesNames("Assets/Resources/Sprites", ".png").ToArray();

Aí vc teria todos os nomes de todos os sprites da pasta dentro do array "spritesNames", com isso vc pode usar o Resources.Load para chamar eles direito da pasta, sem precisar linkar pelo inspector.

Pra cenas ficaria:
Código:
string[] scenesNames = FilesName.GetFilesNames("Assets/Resources/Scenes", ".unity").ToArray();

Já imagina que pode usar o SceneManager de uma forma mais fácil né?
avatar
MayLeone
ProgramadorMaster

Feminino PONTOS : 580
REPUTAÇÃO : 175
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras :

Ver perfil do usuário http://compilemosfacil.blogspot.com.br

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por Nalfam em Sab Nov 03, 2018 5:29 pm

Método útil no desenvolvimento de projetos?
COM CERTEZA!!!
mto obrigado por compartilhar!
avatar
Nalfam
Membro
Membro

Masculino PONTOS : 199
REPUTAÇÃO : 22
Áreas de atuação : Unity
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por Tegh em Dom Nov 04, 2018 9:25 am

Com um código na mão e economia de dados no bolso, Show!
avatar
Tegh
MembroAvançado

Masculino PONTOS : 257
REPUTAÇÃO : 37
Idade : 17
Áreas de atuação : Desenvolvimento de Software com C#, aprendizado na Unity e formulação de Sprite no estilo PixelArt.
Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por dstaroski em Dom Nov 04, 2018 5:32 pm

Show!
avatar
dstaroski
Instrutor

Masculino PONTOS : 3814
REPUTAÇÃO : 991
Idade : 29
Áreas de atuação : Téc. Hardware e Redes, Programação C#.

Respeito as regras :

Ver perfil do usuário https://gamejolt.com/games/defeattheilluminatis/347786

Voltar ao Topo Ir em baixo

TUTORIAL Re: [TUTORIAL] Acessar nomes de arquivos diretamente da pasta

Mensagem por gurgelg752 em Ter Nov 06, 2018 12:30 pm

@MayLeone escreveu:

Introdução:
Olá! Bem vindos a mais um tutorial aqui no blog! Hoje irei mostrar como você pode ter acesso aos nomes dos arquivos de assets dentro do seu projeto, assim você vai poder armazená-los numa lista para poder usá-los posteriormente.

A ideia de criar este tutorial veio de uma dúvida postada aqui no fórum, na verdade a pessoa apenas queria saber como adicionar prefabs num array sem precisar anexá-los manualmente através do inspector, mas o tutorial de hoje vai não só apenas mostrar como carregar prefabs diretamente da pasta, mas também qualquer asset que você quiser.

Anexando arquivos manualmente:
Antes de mostrar o tutorial, vamos entender como o processo é feito "manualmente" dentro da Unity.
Digamos que você tenha um array do tipo GameObject chamado "objects" e nele você deseja armazenar os prefabs do seu jogo para então poder instanciá-los aleatoriamente na cena.
Para tal, você colocou os prefabs dentro de uma pasta chamada "Prefabs" e então irá anexá-los um por um diretamente no inspector dentro do array "objects":



Agora com os prefabs anexados você pode instanciar algum deles aleatoriamente através do script:




Veja que essa é a forma mais simples de poder instanciar aleatoriamente um prefab na cena do jogo.
Mas digamos que você queira adicionar um novo prefab a ser instanciado, neste caso você terá que adicionar esse novo prefab no array pelo inspector. Caso queira deletar algum prefab já adicionado no array, você terá um erro se não desassociá-lo corretamente no script ou no inspector, ou caso queria que algum prefab seja adicionado em tempo de execução dentro do array, da forma como o script se encontra é praticamente impossível. Outra ação que não podemos realizar primariamente é adicionar mais elementos ao array através do inspector se ele for estatico (static).
Veja então que a manutenção e dinamização do código estão precárias. Para resolver este impasse nós podemos carregar arquivos diretamente da pasta através do método "Resources.Load()".

Resources.Load:
Esse método genérico pode nos auxiliar a carregar recursos diretamente da pasta aonde eles se encontram, assim podemos adicionar os prefabs dentro do array diretamente da pasta sem precisar anexá-los pelo inspector. 
Isso resolveria o nosso problema com relação ao ''static'' e a poder adicionar elementos em tempo de execução.
Para usar o método é bem simples: Basta que a pasta com os arquivos que você deseja carregar estejam dentro de uma subpasta de "Assets" chamada "Resources", e então para manipular os arquivos via script basta referenciar o caminho do arquivo (o diretório de pasta + o nome do asset) e o tipo do arquivo a ser carregado, por exemplo:



Se você testar o código acima verá que ele vai funcionar da mesma forma que antes, só que agora o array "objects" é privado, então não anexamos os prefabs através do inspector, mas sim com a utilização do método Resources.Load.

Veja que o argumento passado para o método é justamente o caminho onde o arquivo está (no meu caso numa pasta chamada "Prefabs") e depois o nome do arquivo. Também note que o tipo usado aqui é o "GameObject" por se tratar de prefabs.

Mas agora você deve pensar... "Como eu faria para adicionar esses recursos diretamente da pasta no meu array, mas sem precisar ficar toda hora especificando o seu nome?" É aí que entra o nosso tutorial, acompanhe:

Obtendo nome dos arquivos:
Agora que entendeu o ponto central do nosso tutorial podemos finalmente começar:
Crie um novo C# script com o nome "FilesName" e delete tudo nele, apenas referencie as bibliotecas: System.Collections (para podermos utilizar arrays), System.Collections.Generic (para podemos utilizar lists) e System.IO (para podermos usar classes de acesso a diretórios de pastas):




Agora crie uma classe estática e pública com o mesmo nome do arquivo criado, ou seja, "FilesName".
Dentro dessa classe vamos criar um método público, estático, que retornará uma list de strings chamado "GetFilesNames", recebendo como parâmetro duas strings, uma chamada "path" (caminho do arquivo) e o outra chamada "extension" (para receber a extensão do arquivo):


O que faremos é o seguinte: esse método irá ter acesso à pasta que contém os arquivos que queremos acessar os nomes, e então ele vai adicionar todos os nomes desses arquivos em uma list de strings que será retornada do método.

Para fazer acesso ao diretório da pasta, basta utilizar um objeto do tipo "DirectoryInfo" e dentro do seu construtor passar o diretório (caminho) da pasta dos arquivos desejados.
Após isso, vamos criar uma variável que receba todos os arquivos que estão contidos naquele diretório, para isso, basta utilizar o método "GetFiles" da instância de "DirectoryInfo". Esse método retorna um array do tipo "FileInfo":


Para garantir que apenas seja retornado arquivos de um único tipo (por exemplo, retornar apenas arquivos com extensão do tipo .prefab) passe como argumento de "GetFiles" a extensão desejada:



Nesse momento, estamos armazenando dentro do array "infos" todos os arquivos do diretório referenciado, então, podemos realizar um foreach dentro deste array:
Antes disso, crie uma list local do tipo string com o nome de "names".
Após fazer isso, faça com que o laço foreach percorra o array "infos":



Dentro do laço crie uma variável local chamada "name" e nela armazene o nome do arquivo através da propriedade "Name".
Para "apagar" a extensão do arquivo no nome (que não é solicitado pelo ResourcesLoad) utilize o método "Replace".
Após tudo isso, adicione "name" na list "names" e no final do laço retorne essa list (se quiser pode adicionar tags de explicações do script com XML summary):



Salve o script.

Utilizando o script:
Para utilizar o nosso script, basta criar um array do tipo string e chamar nosso método "GetFilesNames" passando como argumento o caminho da pasta onde os arquivos se encontram e a extensão dos mesmos:


Agora dentro do array "namesFiles" você tem todos os nomes de todos os arquivos da pasta "Prefabs" que são do tipo ".prefab".
Nesse momento, basta utilizar o Resources.Load como vínhamos fazendo, mas agora quando devemos referenciar o nome do arquivo, podemos utilizar o array "namesFiles" diretamente:


Veja que ao salvar o script e executá-lo, um prefab será instanciado na cena, sem que você precise anexá-los pelo inspector ou ficasse especificando seus nomes.
Agora se você adicionar ou remover prefabs da pasta não precisará alterar nada no script, também poderá manipular esses elementos se o array for estático ou privado e instanciar prefabs em tempo de execução, tudo isso utilizando nosso método "GetFilesNames"!

Veja que esse método não é eficiente apenas para prefabs/gameobjects, você pode utilizar para randomizar um material de um elemento também:


Os materiais que tenho na pasta "Materials" são bem simples:


Note que cada vez que você roda o teste, o elemento muda de cor aleatoriamente:


Finalização:
E aqui chega o fim de mais um tutorial do blog! Espero que tenham gostado e que este método seja útil para você em algum momento de seu desenvolvimento. Até a próxima!
Nossa valeu !!!! Smile
avatar
gurgelg752
MembroAvançado

PONTOS : 488
REPUTAÇÃO : 17
Áreas de atuação : estudo programação c# nas horas vagas

Respeito as regras :

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum