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:
site de programaçoes
Movimentação 2D
A trágica história de um jogo bem-sucedido
[TUTORIAL] Inserindo animações com Mixamo
Mexer a camera com touch
PlayerPrefab
movimentar a camera com o mouse estilo jogo RTS
Script de movimentação
[Formação de Equipe] Quando foi ontem?
Reduzir uso de memória RAM
PRECISO DE AJUDA URGENTE !!!
preciso da ajuda de alguém urgente
Como dar um fade out/escurecer tela/mudar cena após um diálogo terminar?
PRECISO DE UMA PESSOA QUE SAIBA MECHER COM ONLINE NO UNITY
[RESOLVIDO] Problemas com blender
[Formação de equipe] Formação de equipe para o ramo de criação de jogos.
[RESOLVIDO] Como selecionar diferentes objetos com o clique do mouse usando raycast
Uma alternativa para o Visual Studio Community
[RESOLVIDO] Como fazer a funcao do Slider iniciar com o valor setado?
[RESOLVIDO] Como fazer sequência de if e personagem respawnar depois de alguns segundos.
[TUTORIAL] Deixando o unity 2019 preto na versão de graça
Por favor, coloquem a opção de excluir mensagem
Animações Bugando ao trocar Ajuda aqui na moral
Ajuda com IAP Purchase Unity PlayStore.
Nano - Jogo de Estratégia para Android
Ajuda com IA
Como passo variáveis entre Cenas?
Alguem sabe se existe uma função parecida a OnMouseEnter para Touch
Recrutando (FugasBR Online Para Mobile e PC)
Código de Joystick obsoleto que o Unity pede para atualizar
Erro na compilação (Visual Studio)
Teaser do Project Lazarus parte 2
Cubo sendo esvaziado 3D
Esta versão não está em conformidade com o requisito de 64 bits do Google Play
Sobre reflexão de luzes no unity e flares
Como salvar tudo de uma que esta em uma scene?
Rotação para inimigo
Como posso resolver o erro "NullRefenceException" da unity
[Duvida] Sistema de movimentação de personagem em 4 direções.
Melhore a IA dos seus jogos - IA do Creeper
Jogo de luta - multiplayer local
DESAFIO MULTPLAYER
[TUTORIAL] Passar Valores entre cenas
Como sobreponho um sprite num objeto em que ambos colidem?
Click na tela Mobile/PC
Bug Animation <não fica em loop> Unity 2019.4
Meu Proprio remake de siren head (em 24hrs)
Troca de fase
[TUTORIAL] AI Enemy ( Jogos de terror )
Um unico script de status serve pra todos em geral?
quero que a camera gire como o personagem mais nao consigo
The scripts needs to derive from monobehaviour
[TUTORIAL] Pegar e Dropar item no chao.[2.0]
[RESOLVIDO] COMO EXECUTAR FUNÇÃO A CADA PERÍODO DE TEMPO
Textura realistas
Sistema de Pontuação (Dúvida)
Como deixar a barra de vida fixa??
[TUTORIAL] Usando Pos Processamento
Humanoid
FPS KIT 1.0 - EM DESENVOLVIMENTO
Alguém pode me ajuda a coloca animação quando anda?
Mudar cena ao ativar um objeto
Escape the Danonão (Jogo de terror do Danonão Grosso no estilo Slender)
UI duplicando numeração usando SceneManager.LoadScene
AssetBundle não renderiza
Lets Play RPG - No editor funciona perfeito, porem dps de compilado nao funciona.
PAUSE PARCIAL
duvida sobre C# e unity
Como Add Fog em lugar no mundo específico
Como criar sistema de Habilidades (Skills) para o personagem 2D / e sistema de batalha 2D
Como identificar o vencedor em uma corrida multiplayer?
Sistema de desaceleração usando MovePosition
Alguém poderia me ajuda?
Como fazer um ciclo dia e noite com transição de skyboxes?
Como limito um movimento de modo a que não se movimente na diagonal?
[TUTORIAL] Sistema de DIA E NOITE completo, com luzes noturnas e SISTEMA DE NUVENS
Animaçao de sacar arma
Movimentaçao de personagem 3d
Rotacionar objeto de acordo com direção que ele está se movendo
Dúvida com o IEnumertor
[DUVIDA]como coloco um audio enquanto uma esfera roda
Fear - Modern House The Game [WINDOWS - ANDROID]
Sistema de pulo 2d
COMO MUDAR GETKEY WASD PARA GETBUTTON HORIZONTAL E VERTICAL ???
TOCAR SONS REPETIDAMENTE
Duvida sobre o forum
Explicacao de GD para CSharp[GODOT]
Tutorial Game de Plataforma 2D[GODOT]
Tutorial Inteligencia Artificial 2D[GODOT]
Sistema de vitória em um jogo multiplayer (photon 2)
Movimentar inimigo em posições aleatorias
Parallax travando, segue o código que utilizo
Jogo Maria Bella
Joystick Mobile do Marcos Schult
[RESOLVIDO] Pegar um frame no animation via C# Unity 3D
[AJUDA] NavMesh bugado
Jogo de Galo e de Galinha também
Movimento com Botões Unity 3D
[Dúvida] posições de objetos e âncora
Hoje à(s) 7:47 am
Ontem à(s) 11:31 pm
Ontem à(s) 8:25 pm
Ontem à(s) 6:37 pm
Ontem à(s) 2:13 pm
Sab Jul 11, 2020 8:19 pm
Sab Jul 11, 2020 6:08 pm
Sab Jul 11, 2020 8:08 am
Sex Jul 10, 2020 11:13 pm
Sex Jul 10, 2020 5:42 pm
Sex Jul 10, 2020 3:56 pm
Sex Jul 10, 2020 2:55 pm
Sex Jul 10, 2020 2:43 pm
Sex Jul 10, 2020 2:17 pm
Sex Jul 10, 2020 1:05 pm
Sex Jul 10, 2020 12:35 pm
Sex Jul 10, 2020 9:49 am
Sex Jul 10, 2020 8:07 am
Qui Jul 09, 2020 7:42 pm
Qui Jul 09, 2020 6:09 pm
Qui Jul 09, 2020 4:26 pm
Qui Jul 09, 2020 1:18 pm
Qui Jul 09, 2020 12:09 pm
Qua Jul 08, 2020 8:58 pm
Qua Jul 08, 2020 4:50 pm
Qua Jul 08, 2020 4:40 pm
Qua Jul 08, 2020 4:34 pm
Qua Jul 08, 2020 3:15 pm
Qua Jul 08, 2020 2:51 pm
Qua Jul 08, 2020 12:53 pm
Ter Jul 07, 2020 10:18 pm
Ter Jul 07, 2020 7:56 pm
Seg Jul 06, 2020 6:56 pm
Seg Jul 06, 2020 6:52 pm
Dom Jul 05, 2020 9:13 pm
Dom Jul 05, 2020 7:17 pm
Dom Jul 05, 2020 7:15 pm
Dom Jul 05, 2020 2:56 pm
Dom Jul 05, 2020 2:05 pm
Dom Jul 05, 2020 1:43 pm
Dom Jul 05, 2020 11:50 am
Sab Jul 04, 2020 5:02 pm
Sab Jul 04, 2020 3:20 pm
Sab Jul 04, 2020 3:08 pm
Sab Jul 04, 2020 11:02 am
Sab Jul 04, 2020 2:31 am
Sex Jul 03, 2020 1:14 pm
Sex Jul 03, 2020 12:34 pm
Qui Jul 02, 2020 5:28 pm
Qui Jul 02, 2020 5:06 pm
Qui Jul 02, 2020 3:06 pm
Qui Jul 02, 2020 2:57 pm
Qui Jul 02, 2020 2:07 pm
Qui Jul 02, 2020 1:59 pm
Qui Jul 02, 2020 1:25 pm
Qui Jul 02, 2020 11:32 am
Qui Jul 02, 2020 12:00 am
Qua Jul 01, 2020 6:31 pm
Qua Jul 01, 2020 6:04 pm
Qua Jul 01, 2020 6:00 pm
Qua Jul 01, 2020 3:19 pm
Qua Jul 01, 2020 1:18 pm
Qua Jul 01, 2020 8:59 am
Qua Jul 01, 2020 8:54 am
Qua Jul 01, 2020 8:51 am
Qua Jul 01, 2020 8:22 am
Ter Jun 30, 2020 2:22 pm
Ter Jun 30, 2020 11:25 am
Seg Jun 29, 2020 7:51 pm
Seg Jun 29, 2020 4:45 pm
Seg Jun 29, 2020 12:49 pm
Seg Jun 29, 2020 11:41 am
Seg Jun 29, 2020 9:53 am
Dom Jun 28, 2020 11:59 pm
Dom Jun 28, 2020 10:02 pm
Dom Jun 28, 2020 10:01 pm
Dom Jun 28, 2020 5:55 pm
Dom Jun 28, 2020 10:40 am
Dom Jun 28, 2020 9:16 am
Dom Jun 28, 2020 7:29 am
Sab Jun 27, 2020 2:53 pm
Sab Jun 27, 2020 8:08 am
Sex Jun 26, 2020 12:18 pm
Qui Jun 25, 2020 10:40 pm
Qui Jun 25, 2020 10:20 pm
Qui Jun 25, 2020 5:18 pm
Qui Jun 25, 2020 5:13 pm
Qui Jun 25, 2020 5:10 pm
Qui Jun 25, 2020 5:08 pm
Qui Jun 25, 2020 4:45 pm
Qui Jun 25, 2020 12:35 pm
Qui Jun 25, 2020 10:45 am
Qui Jun 25, 2020 7:21 am
Qui Jun 25, 2020 12:30 am
Qua Jun 24, 2020 8:02 pm
Qua Jun 24, 2020 6:58 pm
Qua Jun 24, 2020 6:37 pm
Qua Jun 24, 2020 3:23 pm
Qua Jun 24, 2020 11:41 am
artplayer
Nitram766
thales.ulisses
Lukas2460
Wahder
adryansantoss
JulioWinchester
LúcioHenrique098
Nitram766
MRX
artplayer
Magnatah
Magnatah
marlon33
MRX
Weslley
JulioWinchester
artplayer
TioUV
flaviopunk182
NKKF
CShar
Fagner
poyser
Koai
Koai
Koai
KurotamaXIII
fecirineu
flaviopunk182
orph
Patrick
orph
iToddy
dknoob537
JoelMJunior
BrunoMga07
M.Choice
FerX95
ScorpionG4mer
jsiilva2k
BrunoMga07
Tiagotes
Tiagotes
Micco
fabricadegame
thales.ulisses
Micco
maxwellvale
Magnatah
Andrew lameira batista
kauannunes
Micco
CristhianSelbach
vini024
Callyde Jr
Hohenheim
hendrick22
adryansantoss
pekazao
Th2y
Micco
AmazingDeliciano
AmazingDeliciano
numb123
gtcmcsgo
FabioYuji
artplayer
Gabriel M
04vini
EliezerGomes
gabrimo
streamer
mama2401
Tiagotes
Albert Vinicius
iToddy
Micco
Ezequiel286
JoelMJunior
diegopds
thales.ulisses
AndreDeveloper
teos626
eduardoklausss
Chilinger
Chilinger
Chilinger
Chilinger
MarcosSchultz
Callyde Jr
bunijaclp
thales.ulisses
teos626
KurotamaXIII
AmazingDeliciano
poyser
KurotamaXIII
poyser

[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 2: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
Instrutor

Feminino PONTOS : 1799
REPUTAÇÃO : 448
Áreas de atuação : Unity & C#
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 2:24 pm

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

Masculino PONTOS : 3014
REPUTAÇÃO : 506
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

Voltar ao Topo Ir em baixo

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

Mensagem por MayLeone em Sab Nov 03, 2018 2: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
Instrutor

Feminino PONTOS : 1799
REPUTAÇÃO : 448
Áreas de atuação : Unity & C#
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 4:29 pm

Método útil no desenvolvimento de projetos?
COM CERTEZA!!!
mto obrigado por compartilhar!
Nalfam
Nalfam
MembroAvançado

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

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
Avançado
Avançado

Masculino PONTOS : 1062
REPUTAÇÃO : 97
Idade : 19
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

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 : 4685
REPUTAÇÃO : 1110
Idade : 31
Áreas de atuação : Unity 3D

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

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

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 : 823
REPUTAÇÃO : 0
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

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 : 3014
REPUTAÇÃO : 506
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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
Instrutor

Feminino PONTOS : 1799
REPUTAÇÃO : 448
Áreas de atuação : Unity & C#
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 : 3014
REPUTAÇÃO : 506
Idade : 15
Áreas de atuação : Desenvolvedor na Unity, NodeJS, React, ReactJS, React Native, MongoDB e Firebase.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta Aad8pUi

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 : 2176
REPUTAÇÃO : 162
Idade : 21
Áreas de atuação : Programador em C#, Desenvolvedor Indie.
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

http://www.naotenho.com.br

Voltar ao Topo Ir em baixo

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

Mensagem por juansup em Qua Jun 10, 2020 5:48 pm

@DuViDoSo escreveu:Da pra usar isso depois do jogo compilado, pra fazer uma personalização estilo CS 1.6 ou coisa assim?
Estou com a mesma duvida para um projeto.
juansup
juansup
Avançado
Avançado

Masculino PONTOS : 823
REPUTAÇÃO : 6
Idade : 17
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

https://supremaciasup.blogspot.com/

Voltar ao Topo Ir em baixo

Voltar ao Topo


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