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:
como fazer a luz ficar "important" e "not important" por script?
[TUTORIAL] Sistema de Entregas + GPS!
[TUTORIAL] Desenvolvendo um jogo de quebra-cabeças
duvida sobre sistema de cheats estilo gta sa
[Tutorial] Gerando Objetos Proceduralmente
[____TÓPICO LIVRE____] FALE O QUE QUISER (Parte 2)
COMO EXECUTAR AUDIO QUANDO PLAYER MORRE
Erro ao publicar na google play
[____ASSET____] MS Vehicle System (FREE VERSION)
[TUTORIAL] Unity 5.5 - Splash Screen
SOU MODELADOR SE TIVER ALGUEM PRECISANDO AI ME CONTATE
Como bloquear rotação em um eixo do objeto?
Como adicionar todos materiais de um Obj em um Array ou Lista?
PopUp bloqueando versões antigas do jogo
[____ QUAL A OPINIÃO DE VOCÊS SOBRE O FÓRUM? ____]
[TUTORIAL] Sistema de PORTAS e CHAVES
Movimentação 3D View Blender
Som não funciona no IOS
Requisitos de hardware para Post Processing
Imagem Aparecer como pergunta
Aparecer item comprado
Por que a UI da esse "BUG"?
Zerar os tempos do Cronometro Unity
Ajuda na unity
Girar personagem no próprio eixo usando joystick virtual
Problema com Esqueleto do personagem
PRESSIONAR BOTÃO TOUCH NO ANDROID SERÁ O MESMO QUE PRESSIONAR UMA TECLA DO TECLADO REAL
Quanto Devo Cobrar Por Um Pacote De Modelos 3D ?
Script de Contagem Regressiva
Ajuda com o codigo.
Como acessar uma variável de um script utilizando como parâmetro uma variável nomescript
CRIEI MEU PRIMEIRO JOGO! 1 ANO DE TRABALHO!
Como eu faço pra poder interagir apenas uma vez com um objeto de luz?
MOVIMENTAÇAO DE UM CUBO
Duvida sobre materiais e textura
Super Husky - meu jogo
Duvida sobre Unity
[Em Desenvolvimento] Battles of Worlds
Dúvida de imagem sobre realidade aumentada
Converter string em virgula em float (decimal)
[TUTORIAL] Como usar FREE EASY CRIATURA CONTROLE IA
Duvida em relação processo de geração de receita
Preciso de ajuda com GetButtonDown with Axis
Me ajudem por favor
Detectando Colisão da Arma com o Inimigo
Como posiciono meu interestial admob pra aparecer apenas quando o personagem morrer?
Como eu faria pra ter uma animação diferente para cada lado em um jogo de plataforma 2D?
JOGO DE CARRO EM 2D E PRECISO DE AJUDA EM SCRIPT QUE VAI PRA FRENTE E PRA TRAZ
[RESOLVIDO] Abrir Tampa Ao Apertar o Botão do Mouse
Problemas com .blend para unity
Assetion faled on expression: SUCCEEDED(hr)´
[RESOLVIDO] Raycast que seque o player
OBJETO CONTINUAR FLUTUANDO TENDO RAGDOLL
[TUTORIAL] Roleta de Premios
COMO INTRODUZO O NPC NO VEÍCULO UTILIZANDO O MS VEHICLE SYSTEM?
Duvida - Tilemap
[TUTORIAL] Salvar a última posição do personagem ao trocar de cena
Sistema de codigos utilizando PlayerPrefs
[Duvida] Jogo Futebol - Fisica
[RESOLVIDO] Visual Studio não se auto-completa
[RESOLVIDO] Não consigo somar o PlayerPrafs do meu game
[RESOLVIDO] AJUDA COM SCRIPT COLETAR 8 PEÇAS PARA ABRIR PORTA
Conta desenvolvedor android
[RESOLVIDO] Criando terreno para mobile
SnowFall
Erro no Script
AJUDA COM PROBLEMA QUANDO INIMIGO MORRE
[Duvida] Como Edito uma animação do Mixamo ?
Sea Ruler
Tem como texturizar apenas uma face do cubo no Unity?
[RESOLVIDO] Light moba style
[RESOLVIDO] Problema com script básico
Por que o unity não está abrindo? Grizzly 2.3.30? Request failed?
[DÚVIDA] Fazer um zumbi..
[RESOLVIDO] Como Fasso Para O HingeJoint Virar em Duas Direçoes?
[RESOLVIDO] Obter um valor ne uma lista
Duvidas sobre Programação, Banco de Dados, PHP/XML em Unity, Json ou PlayerPrefs?
[RESOLVIDO] Quando dou BAKE na cena, as sombras dos objetos somem!
SkyBox Lerp
Como fazer pro meu tiro matar o inimigo?
[ARTIGO] Inteligência Artificial para Jogos
[TUTORIAL] Unity 5 - Wheel Collider, veículos, suspensão realista.
dança
Caixa de notificações
SCRIPT DE INTELIGENCIA ARTIFICIAL PARA ZUMBI, DESVIAR DE OBJETOS E ATACAR JOGADOR
Script faz a função tudo certo na unity, já quando gero apk o script não faz a função
[RESOLVIDO] Script não funciona corretamente, qual seria o problema?
Qual o nome das funções prontas no Unity (transform, linecast)
Arquivos com Casa, arvores, Gramas, Objetos3d Etc...
Novo App Maquininha Virtual
Shader com efeito de dissolução
[TUTORIAL] Sistema de DIA E NOITE completo, com luzes noturnas e SISTEMA DE NUVENS
Formação de Equipe ( Favela Killer)
Movimentação com RigidBOdy2D dando travadinhas
Como Configurar a Unity, para que modifique o seu Eixo?
Pegar Valor int, Como?
POSSO PUBLICAR MEUS JOGOS USANDO VERSÃO GRATUITA DESSA ENGINE...
Parceria em game 2D
[TUTORIAL] Sistema de Lanterna com Pilhas
Hoje à(s) 10:06 am
Hoje à(s) 10:02 am
Hoje à(s) 9:46 am
Ontem à(s) 11:53 pm
Ontem à(s) 9:42 pm
Ontem à(s) 9:20 pm
Ontem à(s) 8:17 pm
Ontem à(s) 5:20 pm
Ontem à(s) 1:04 pm
Ontem à(s) 2:01 am
Dom Jun 16, 2019 6:02 pm
Dom Jun 16, 2019 2:43 pm
Dom Jun 16, 2019 2:16 pm
Dom Jun 16, 2019 1:16 pm
Dom Jun 16, 2019 4:33 am
Dom Jun 16, 2019 4:03 am
Sab Jun 15, 2019 5:52 pm
Sab Jun 15, 2019 3:16 pm
Sab Jun 15, 2019 2:43 pm
Sab Jun 15, 2019 1:43 pm
Sab Jun 15, 2019 12:01 am
Sex Jun 14, 2019 10:47 pm
Sex Jun 14, 2019 9:39 pm
Sex Jun 14, 2019 9:20 pm
Sex Jun 14, 2019 8:56 pm
Sex Jun 14, 2019 8:31 pm
Sex Jun 14, 2019 8:18 pm
Sex Jun 14, 2019 8:12 pm
Sex Jun 14, 2019 7:09 pm
Sex Jun 14, 2019 6:26 pm
Sex Jun 14, 2019 8:59 am
Sex Jun 14, 2019 5:25 am
Qui Jun 13, 2019 7:42 pm
Qui Jun 13, 2019 7:33 pm
Qui Jun 13, 2019 1:02 pm
Qua Jun 12, 2019 8:26 pm
Qua Jun 12, 2019 5:27 pm
Qua Jun 12, 2019 3:54 pm
Qua Jun 12, 2019 3:01 pm
Qua Jun 12, 2019 2:50 pm
Qua Jun 12, 2019 12:13 pm
Ter Jun 11, 2019 5:26 pm
Ter Jun 11, 2019 3:47 pm
Ter Jun 11, 2019 3:43 pm
Ter Jun 11, 2019 8:13 am
Seg Jun 10, 2019 12:24 pm
Dom Jun 09, 2019 10:46 pm
Dom Jun 09, 2019 3:19 pm
Dom Jun 09, 2019 2:21 pm
Dom Jun 09, 2019 12:04 pm
Dom Jun 09, 2019 10:42 am
Sab Jun 08, 2019 11:56 pm
Sab Jun 08, 2019 10:52 pm
Sab Jun 08, 2019 10:33 pm
Sab Jun 08, 2019 10:06 pm
Sab Jun 08, 2019 9:41 pm
Sab Jun 08, 2019 8:40 pm
Sab Jun 08, 2019 8:32 pm
Sab Jun 08, 2019 2:00 pm
Sab Jun 08, 2019 12:50 pm
Sab Jun 08, 2019 8:59 am
Sex Jun 07, 2019 8:21 pm
Sex Jun 07, 2019 3:50 pm
Sex Jun 07, 2019 3:39 pm
Qui Jun 06, 2019 10:47 pm
Qui Jun 06, 2019 2:48 pm
Qua Jun 05, 2019 1:48 pm
Qua Jun 05, 2019 10:43 am
Ter Jun 04, 2019 6:35 pm
Ter Jun 04, 2019 3:20 pm
Ter Jun 04, 2019 11:20 am
Seg Jun 03, 2019 3:49 am
Seg Jun 03, 2019 2:31 am
Dom Jun 02, 2019 11:53 pm
Dom Jun 02, 2019 10:01 pm
Dom Jun 02, 2019 12:44 pm
Sab Jun 01, 2019 2:42 pm
Sab Jun 01, 2019 4:32 am
Sex Maio 31, 2019 8:26 pm
Sex Maio 31, 2019 4:02 pm
Sex Maio 31, 2019 12:20 pm
Qui Maio 30, 2019 7:34 pm
Qui Maio 30, 2019 4:29 pm
Qui Maio 30, 2019 4:27 pm
Qui Maio 30, 2019 4:26 pm
Qua Maio 29, 2019 3:42 pm
Qua Maio 29, 2019 10:15 am
Ter Maio 28, 2019 5:40 pm
Ter Maio 28, 2019 2:49 pm
Ter Maio 28, 2019 1:47 pm
Ter Maio 28, 2019 9:37 am
Ter Maio 28, 2019 9:22 am
Ter Maio 28, 2019 8:31 am
Seg Maio 27, 2019 4:53 pm
Seg Maio 27, 2019 3:22 pm
Seg Maio 27, 2019 2:42 pm
Dom Maio 26, 2019 5:58 pm
Dom Maio 26, 2019 11:44 am
Dom Maio 26, 2019 2:58 am
MarceloYBP
JhoowGamer
Diego Felix
kalango studios games
Matrirxp
NKKF
Diego Felix
slevimk
dkrazor
henriquegusbr
Socates
LúcioHenrique098
ffabim
Diguinho
MarcosSchultz
MarcosSchultz
lesgoy
fjosmoreno
guimaraf
MayLeone
Magnatah
glauco
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
Magnatah
artplayer
Tegh
fluminintia
diegopds
diegopds
ronigleydson
GameLACK
poyser
Dom3000
numb123
numb123
Unidade3d5
poyser
velho rabugento
JohnRambo
marlok3d
slevimk
mathhBR
Magnatah
williangamesbr4021
Magnatah
Giuliano Neto
hendrick22
MarcosSchultz
Diguinho
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MayLeone
LúcioHenrique098
yurinogueira
yurinogueira
JohnRambo
JohnRambo
NKKF
artplayer
Diego Felix
diegopds
NKKF
ronigleydson
erifmeurer
yurinogueira
luiz12345
gcs13
williangamesbr4021
hendrick22
artplayer
BrazaTattoo
Brian Victor
JohnRambo
Callyde Jr
MarcosSchultz
MarcosSchultz
MarcosSchultz
MarcosSchultz
MayLeone
glauco
Tegh
glauco
fecirineu
fabricadegame
fabricadegame
thales.ulisses
MarcosSchultz
glauco
Tegh
GameLACK
Priste_Hell
MarcosSchultz

[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

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Unity

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":


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B1

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


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B2


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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B3


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):


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B4


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):

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B5

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":

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B6

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B7


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":

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B8


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):

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B9


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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B10

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B11

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B12

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

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B13

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

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B14

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!
MayLeone
MayLeone
ProgramadorMaster

Feminino PONTOS : 974
REPUTAÇÃO : 255
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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?
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2455
REPUTAÇÃO : 465
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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é?
MayLeone
MayLeone
ProgramadorMaster

Feminino PONTOS : 974
REPUTAÇÃO : 255
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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!
Nalfam
Nalfam
MembroAvançado

Masculino PONTOS : 425
REPUTAÇÃO : 24
Áreas de atuação : Unity
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

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!
Tegh
Tegh
ProgramadorMaster

Masculino PONTOS : 599
REPUTAÇÃO : 82
Idade : 18
Áreas de atuação :
Programador intermediário de C#;
Conhecedor da plataforma .NET Framework/Core e Unity;
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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!
dstaroski
dstaroski
Instrutor

Masculino PONTOS : 4260
REPUTAÇÃO : 1089
Idade : 30
Áreas de atuação : Desenvolvedor .NET Jr. ,Téc. Hardware e Redes, Programação C#, Asp .NET, HTML, CSS, Unity 3D

Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

Ver perfil do usuário http://diegodeoliveira.gamejolt.io/defeattheilluminatis

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:
[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Unity

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":


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B1

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


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B2


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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B3


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):


[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B4


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):

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B5

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":

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B6

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B7


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":

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B8


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):

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B9


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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B10

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B11

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:

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B12

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

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B13

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

[TUTORIAL] Acessar nomes de arquivos diretamente da pasta Untitled%2B14

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
gurgelg752
gurgelg752
MembroAvançado

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

Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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

Mensagem por ledgarion em Qua Jan 09, 2019 9:35 pm

Obrigado!! será muito útil!! Smile

ledgarion
Iniciante
Iniciante

PONTOS : 432
REPUTAÇÃO : 0
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

Ver perfil do usuário

Voltar ao Topo Ir em baixo

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

Mensagem por NKKF em Qui Jan 10, 2019 12:40 am

Será que dá para fazer com scripts
(Rapaiz, se der, a vida fica fácil demais.. xD)
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2455
REPUTAÇÃO : 465
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 Qui Jan 10, 2019 11:36 pm

@NKKF escreveu:Será que dá para fazer com scripts
(Rapaiz, se der, a vida fica fácil demais.. xD)
 Dá sim, só colocar o caminho pra pasta e a extensão ".cs"
Cheers
MayLeone
MayLeone
ProgramadorMaster

Feminino PONTOS : 974
REPUTAÇÃO : 255
Áreas de atuação : Unity, C++/C#, HTML, CSS, JS, jQuery, PHP, MySQL, XML, Blender
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 Dom Jan 20, 2019 6:14 pm

Mas como eu converteria o caminho do script para um objeto (Script)?
NKKF
NKKF
ProgramadorMaster

Masculino PONTOS : 2455
REPUTAÇÃO : 465
Idade : 14
Áreas de atuação : Error 404 Not Found.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 DuViDoSo em Ter Jan 22, 2019 10:33 pm

Da pra usar isso depois do jogo compilado, pra fazer uma personalização estilo CS 1.6 ou coisa assim?
DuViDoSo
DuViDoSo
Modelador

Masculino PONTOS : 1784
REPUTAÇÃO : 158
Idade : 19
Áreas de atuação : Programador em C#, Desenvolvedor Indie.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

Ver perfil do usuário http://www.naotenho.com.br

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