 Fala galera, Henrique aqui e nesse vídeo eu vou falar sobre instanciamento automático, conhecido também como INSPALM, e pra isso a gente vai estar utilizando a classe PacketSin. O INSPALM é um objeto que serve de referência para a gente estar instanciando objetos de maneira dinâmica e automática, geralmente intervalos previseiros de tempo, que não é impossibilito da gente fazer instanciamento com intervalos aleatores. Esse tipo de mecânica pode ser encontrado em número de gênero de jogos, desde os MMORPGs até os runners e plataformas, vai depender exclusivamente de que tipo de objeto está sendo instanciado. O spawner vai consistir de três características básicas, o que ele deve instanciar, o objeto, onde ele deve instanciar e o intervalo de tempo entre os instanciamentos. Bom, então pra isso a gente vai estar usando três classes, PacketSin, pra determinar os objetos que vão estar sendo instanciados, Position2D, só pra servir como referência para as instancias mesmo, e um Timer, pra desencadear os eventos de instanciamento e também pra determinar o intervalo de tempo entre eles. Uma opção também se você quiser é adicionar um AnimationPlayer pra animar a posição 2D, assim vai ficar um pouco mais dinâmico. Bom, pra começar você pode criar uma nova cena e adicionar o Position2D como trunk, ou seja, o primeiro note da cena, e adiciona também um Script pra ele. No Script, declara as variáveis necessárias pra cumprir os quesitos que a gente precisa. No meu caso, eu prefiro exportá-las pro editor, assim cada spawner pode trabalhar de forma diferente com valores independentes do que está no Script, vocês vão entender já já. Sobre essas variáveis, essas duas primeiras servem como referência pro objeto que vai ser instanciado, ou seja, pra quem não sabe, PacketSync é a classe responsável por tratar de todas as cenas salvas no Godot. Só uma observação, como as cenas são salvas em disco, a gente vai precisar carregar uma referência quando o jogo executar, por isso que assim que o note entrar na cena, a gente vai usar o método Load, ele pede um path do recurso que vai ser carregado e carrega ele em tempo real, de forma dinâmica, mas é um pouco mais lento que o preload, que é estático mais carrega já essas duas variáveis aqui vão servir de referência pro timer, eu faço assim porque pode acontecer da hierarquia mudar durante o projeto e tal, daí pra não mexer no código eu prefiro mudar direto no inspector e tudo vai continuar funcionando do mesmo jeito. Essas daqui a gente vai usar pra determinar o intervalo de tempo entre um spawn e outro. Bom, agora a gente já pode fazer o setup da nossa cena. Adicione o timer e conecte o sinal Timeout e não se esqueça da opção One Shot, pra não ficar spawnando descontroladamente. Se quiser, adicione o Animation Player também e anima a posição do objeto pra dar um pouco mais de dinâmica na hora de spawnar, assim ele vai sempre spawnar em uma posição diferente da anterior, isso dá um pouco de aleatoriedade pro jogo. Voltando ao script, na função que foi criada quando a gente conectou o sinal Timeout, nós vamos implementar a lógica de spawn, pra isso vamos declarar uma variável que vai ser uma instância, ou seja, uma cópia da Packet 5 que a gente carregou lá no começo do código. Agora, vamos trabalhar em cima dessa instância. Primeiro, vamos incluir ela na árvore de processamento, ou seja, a Sintree e pra isso nós vamos adicioná-la como Child of the Parent, um Notepie do spawner. Isso porque se a gente adicionar direto ao spawner e ele estivesse movendo, a instância vai se mover junto e a gente não quer isso. Nós vamos usar a posição de spawner apenas como referência pro objeto que está sendo instanciado. Depois dessa parte de incluir o objeto na cena, é só reiniciar o Timer e colocar um novo intervalo de tempo, pra isso nós vamos sortear um número aleatório baseado no tempo mínimo e máximo que a gente declarou lá em cima. E aí, iniciar o Timer novamente. Pra quem não entende essa parte, a Class Timer é como um relógio e possui uma função pra definir o tempo de espera pra começar a contagem regressiva. Quando a contagem chega a zero, ele emite o sinal Timeout. Nós vamos repetir essa parte do Timer dentro do Cal da função Ready, pra desencadear o resto do código automaticamente. Ah, e não se esqueça de chamar a função Randomize, a sinal de garante que os intervalos de tempo serão diferentes toda vez que o jogo iniciar. Bom, agora é só definir as variáveis que foram exportadas, selecionar o objeto que vai se instanciar, definir o Timer, colocar um intervalo de tempo e colocar a animação em Autoplay. Não se esqueça, caso você tenha feito uma animação. E se tu tiver dado certo, esse é o resultado esperado. Galera, espero que vocês tenham gostado, comente aí o que vocês acharam do vídeo, dúvidas e afins. E é isso, continuem desenvolvendo e até o próximo vídeo.