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:
Dúvida sobre Instanciate
como desativar um script usando botão na unity
como fazer botão simular uma tecla do teclado para jogos android unity
Clonar partícula na cena.
Preciso de ajuda com GetMouseButton para dar play em audio
TRIGGER DE ANIMAÇÃO
Otimização
[RESOLVIDO] Rotação de um gameobject sem que os filhos se alterem?
Trigger Raio e Trovão
Não consigo desativar script de gameObject (C#)
posso divulgar o fórum em meu site?
Alguém poderia mudar esse script pra botão
Como desativar e habilitar o Skinned MeshRenderer?
Como transformar um vídeo em espaço editável na Unity?
[TUTORIAL] Inimigo seguir e atacar Player ao encostar
Trocar Personagem/Skin
Como faz para o jogo rodar mesmo quando minimizado?
Alguem poderia me ajudar com combo 2d?
Jogador pode escolher que tipo de pos processamento usar nas configurações?
Como se faz um sistema de combo pra mobile
Como fazer com que collider detecte colisao de objeto especifico?
Problema mudar de sprite sempre que seja adicionado um novo sprite a lista
Colocar video no unity
Imagem excedendo o limite da tela. Como resolver?
Erro no Android
Como abrir uma empresa de games?
Informação Importante sobre o Edge Collider 2D
Como consigo aquele efeito de lanterna imagem abaixo
Como posso usar a função OnClick nesse script
[TUTORIAL] Como carregar uma cena em segundo plano?
[Tutorial] Sistema de Combos (Mobile e PC)
Personagem sofre dando e continua de onde parou com condição.
Como Abrir Porta do Carro (Capo,PortaMalas, Portas) Mirando Nelas
[RESOLVIDO] Várias faixas de música
[RESOLVIDO] int Random.Range(int min, int max) para geração procedural ?
Como fazer o som funcionar de acordo com a velocidade do objeto
Alto falante Vibrar
[RESOLVIDO] Luz no interior
[TUTORIAL] Como Fazer com que as Luzes Iluminem apenas o que você deseja
Traduções e Dublagens de games
[RESOLVIDO] Cono mudar a Tag por script?
[RESOLVIDO] Qualidade do sprite - Compression
[TUTORIAL] Unity 3D - AnimationCurve
[RESOLVIDO] Partículas com imagem
[RESOLVIDO] DUVIDA SOBRE ATIVAR UM GAMEOBJECT ATRAVÉS DE UMA CONDIÇÃO
NavMesh não consegue reproduzir sprits de um jogador
NavMesh não faz animação do jogador
Bom dia amigos compro assets do meu interesse!
Criar Ranking Online
[TUTORIAL] ScrollView rapida e facil de fazer
colocar imagem no fórum
Unity ou Game Maker Studio
[TUTORIAL] Tocar audios de uma lista em uma sequência que se repete
Error CS0246, não sei o que fazer
Como faço pra um colisor não reconhecer outro colisor sem usar IsTrigger
[RESOLVIDO] Alteração de nomes e rastreamento das mudanças
Som unity
CHAVE DE ASSINATURA
[TUTORIAL]identificar se está no controle ou teclado
[TUTORIAL] Sistema de fome, sede, barra de vida, barra de estamina, itens e dano por queda
Não estou conseguindo ativar o evento do onClick após instanciar o botão
Exportar Modelo 3D da Unity
Duvida sobre Spawn
Dúvida sobre volatile
[UE4] Por favor me digam como me livrar do motion blur!
[RESOLVIDO] Float to transform
[RESOLVIDO] mudar a cor quando a personagem passa
Como ativar um 'Panel'
Como faço pra desligar e ligar outro text?
Como Faço Para Ativar/Desativar Material Por Script ?
como modificar o script para receber e registar o dano no personagem
[TUTORIAL] Inteligência artificial, inimigo e AIPoints
Meu personagem está tomando repulsão da parede
Problemas com IEnumerator
Meu personagem ta tremendo quando toca em alguma coisa
[TUTORIAL] Como criar tiro no Unity usando Raycast
Scripts travados
Como faço para mudar a posição de um objeto para perto de outro.
Alteração de personagens durante o jogo // parte 2
Como se faz uma grid, apenas e somente uma grid em 3D?
meu primeiro jogo pronto
quero corverter uma int em string
Como mudar a posição de um objeto constantemente sem estar na void Update
Como conseguir fazer para minha moto dar grau
[RESOLVIDO] Alteração de personagens durante o jogo
Como fazer um retrovisor leve para android?
Preciso de um script para andar de moto alguem consegue me ajudar
Como consigo fazer esse efeito de escurecer o ambiente ao atacar?
Como fazer pra selecionar um inimigo pra atacar de varios unity 2d
Setparent Photon
duvida em sistema de Horror de como pegar e solta objeto
[UE4] Como fazer cutscene com o próprio personagem?
Plataforma Flutuante
OS Tycoon (DEVLOG) - Crie seu próprio sistema operacional
[RESOLVIDO] Grande X vermelho
Como desativo o vsync em projeto para celular?
Como fazer uma compra aleatoria em uma cena
Sistema de propagação de fogo
[TUTORIAL] Como utilizar a função " Instantiate "
Hoje à(s) 1:11 am
Ontem à(s) 4:27 pm
Ontem à(s) 2:32 pm
Ontem à(s) 2:25 pm
Ontem à(s) 12:41 pm
Ontem à(s) 10:12 am
Ontem à(s) 9:47 am
Ontem à(s) 3:34 am
Ontem à(s) 1:06 am
Qui Jan 21, 2021 10:59 pm
Qui Jan 21, 2021 9:25 pm
Qui Jan 21, 2021 7:56 pm
Qui Jan 21, 2021 5:11 pm
Qui Jan 21, 2021 3:47 pm
Qui Jan 21, 2021 11:17 am
Qui Jan 21, 2021 10:45 am
Qui Jan 21, 2021 9:54 am
Qua Jan 20, 2021 11:55 pm
Qua Jan 20, 2021 11:53 pm
Qua Jan 20, 2021 11:07 pm
Qua Jan 20, 2021 9:52 pm
Qua Jan 20, 2021 5:29 pm
Qua Jan 20, 2021 4:58 pm
Qua Jan 20, 2021 3:56 pm
Qua Jan 20, 2021 3:53 pm
Qua Jan 20, 2021 9:26 am
Ter Jan 19, 2021 10:30 pm
Ter Jan 19, 2021 8:28 pm
Ter Jan 19, 2021 4:48 pm
Ter Jan 19, 2021 6:49 am
Seg Jan 18, 2021 11:39 pm
Seg Jan 18, 2021 9:31 pm
Seg Jan 18, 2021 10:47 am
Seg Jan 18, 2021 10:34 am
Dom Jan 17, 2021 10:54 pm
Dom Jan 17, 2021 6:28 pm
Dom Jan 17, 2021 2:07 pm
Dom Jan 17, 2021 12:21 pm
Dom Jan 17, 2021 11:19 am
Dom Jan 17, 2021 11:17 am
Dom Jan 17, 2021 11:15 am
Dom Jan 17, 2021 1:44 am
Sab Jan 16, 2021 6:40 pm
Sab Jan 16, 2021 11:43 am
Sab Jan 16, 2021 11:12 am
Sex Jan 15, 2021 8:20 pm
Sex Jan 15, 2021 1:39 am
Qui Jan 14, 2021 9:53 pm
Qui Jan 14, 2021 7:44 pm
Qui Jan 14, 2021 5:35 pm
Qui Jan 14, 2021 3:55 pm
Qui Jan 14, 2021 2:07 pm
Qui Jan 14, 2021 1:51 pm
Qui Jan 14, 2021 12:56 pm
Qua Jan 13, 2021 6:57 pm
Qua Jan 13, 2021 2:45 pm
Ter Jan 12, 2021 11:14 pm
Ter Jan 12, 2021 8:14 pm
Ter Jan 12, 2021 3:16 pm
Seg Jan 11, 2021 6:26 pm
Seg Jan 11, 2021 5:55 pm
Seg Jan 11, 2021 10:51 am
Dom Jan 10, 2021 7:18 pm
Dom Jan 10, 2021 6:21 pm
Dom Jan 10, 2021 3:24 pm
Dom Jan 10, 2021 2:31 pm
Dom Jan 10, 2021 2:29 pm
Dom Jan 10, 2021 10:44 am
Sab Jan 09, 2021 9:30 pm
Sex Jan 08, 2021 9:14 am
Sex Jan 08, 2021 7:07 am
Sex Jan 08, 2021 1:02 am
Sex Jan 08, 2021 12:33 am
Qui Jan 07, 2021 7:31 pm
Qui Jan 07, 2021 5:31 pm
Qui Jan 07, 2021 3:51 pm
Qui Jan 07, 2021 3:49 pm
Qui Jan 07, 2021 12:12 am
Qua Jan 06, 2021 7:40 pm
Qua Jan 06, 2021 4:57 pm
Qua Jan 06, 2021 7:36 am
Ter Jan 05, 2021 5:29 pm
Ter Jan 05, 2021 1:58 pm
Ter Jan 05, 2021 10:35 am
Ter Jan 05, 2021 5:22 am
Ter Jan 05, 2021 1:00 am
Ter Jan 05, 2021 12:02 am
Seg Jan 04, 2021 4:33 pm
Seg Jan 04, 2021 3:24 pm
Seg Jan 04, 2021 3:15 pm
Seg Jan 04, 2021 2:23 pm
Seg Jan 04, 2021 2:06 pm
Seg Jan 04, 2021 8:56 am
Dom Jan 03, 2021 8:18 pm
Dom Jan 03, 2021 9:48 am
Dom Jan 03, 2021 4:14 am
Sab Jan 02, 2021 10:11 pm
Sab Jan 02, 2021 8:36 pm
Sab Jan 02, 2021 8:34 pm
Pokedlg
Vans 123
SauloeArthur
Pokedlg
Charlesoff
Pokedlg
Fagner
ADSK
Pokedlg
wooZbr
SauloeArthur
Pokedlg
Pokedlg
dutrabr100
SauloeArthur
dutrabr100
NKKF
dutrabr100
dutrabr100
Pokedlg
SamoelBanner
Pokedlg
SauloeArthur
NKKF
orph
dutrabr100
acefogo
Fagner
Vans 123
amoraleite
Pokedlg
acefogo
dutrabr100
Pokedlg
dutrabr100
Pokedlg
savtoi
dragongirl
dutrabr100
Rangel Oblivion
dutrabr100
JoelMJunior
MarcosSchultz
dragongirl
dutrabr100
Ren Allen
Ren Allen
LucasGamerFx
SauloeArthur
NKKF
dutrabr100
SauloeArthur
Pokedlg
SauloeArthur
dutrabr100
Alexandre Santos
Pokedlg
starfreddybou69
diegopds
Super
dutrabr100
TIKO
dutrabr100
SauloeArthur
lesgoy
Fagner
Pokedlg
dutrabr100
Pokedlg
SauloeArthur
redPRO
glauco
Op3000
Pokedlg
JulioWinchester
SauloeArthur
SauloeArthur
Leozitu
Ren Allen
speedluk
SauloeArthur
BatataBugada54321
Pokedlg
Pokedlg
Ren Allen
Fagner
123
Pokedlg
macinhadeborracha
MRX
giowde
lesgoy
TIKO
Micco
Leonardo André
lesgoy
Moskeiro
Fagner
mama2401

[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 : 2135
REPUTAÇÃO : 493
Á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 : 3290
REPUTAÇÃO : 526
Idade : 16
Á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 : 2135
REPUTAÇÃO : 493
Á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 : 1036
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 : 1255
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 : 4882
REPUTAÇÃO : 1113
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 : 1284
REPUTAÇÃO : 19
Á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 : 1017
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 : 3290
REPUTAÇÃO : 526
Idade : 16
Á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 : 2135
REPUTAÇÃO : 493
Á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 : 3290
REPUTAÇÃO : 526
Idade : 16
Á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 : 2377
REPUTAÇÃO : 165
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 : 1017
REPUTAÇÃO : 6
Idade : 18
Respeito as regras : [TUTORIAL] Acessar nomes de arquivos diretamente da pasta WvDYdlf

https://supremaciasup.blogspot.com/

Voltar ao Topo Ir em baixo

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

Mensagem por Raquell Sanntos em Sex Ago 21, 2020 2:35 am

Eu posso acessar arquivos .anim diretamente de uma pasta no disco C: do meu pc, fora do projeto? 
Pq tenho um projeto , na qual preciso acessar muitas animaçoes no jogo. Mas não quero adicionar todos dentro do meu jogo, pois meu projeto vai ficar pesado demais. Como iria ficar no código?

Raquell Sanntos
Iniciante
Iniciante

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

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