Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Criando instâncias

Na parte anterior, nós vimos que uma cena é uma coleção de nós organizados em uma estrutura de árvore, com um único nó como sua raiz. Você pode dividir seu projeto em qualquer número de cenas. Essa funcionalidade ajuda você a dividir e organizar os diferentes componentes do seu jogo.

You can create as many scenes as you'd like and save them as files with the .tscn extension, which stands for "text scene". The label.tscn file from the previous lesson was an example. We call those files "Packed Scenes" as they pack information about your scene's content.

Here's an example of a ball. It's composed of a RigidBody2D node as its root named Ball, which allows the ball to fall and bounce on walls, a Sprite2D node, and a CollisionShape2D.

../../_images/instancing_ball_scene.png

Depois de salvar uma cena, ela funciona como um projeto: você pode reproduzi-la em outras cenas quantas vezes quiser. Replicar um objeto de um modelo como este é chamado de instanciamento.

../../_images/instancing_ball_instances_example.png

Como mencionamos na parte anterior, as cenas instanciadas se comportam como um nó: o editor oculta seu conteúdo por padrão. Quando você instancia a Bola, você vê apenas o nó Ball. Observe também como cada duplicata tem um nome exclusivo.

Every instance of the Ball scene starts with the same structure and properties as ball.tscn. However, you can modify each independently, such as changing how they bounce, how heavy they are, or any property exposed by the source scene.

Na prática

Let's use instancing in practice to see how it works in Godot. We invite you to download the ball's sample project we prepared for you: instancing_starter.zip.

Extract the archive on your computer. To import it, you need the Project Manager. The Project Manager is accessed by opening Godot, or if you already have Godot opened, click on Project -> Quit to Project List (Ctrl + Shift + Q, Ctrl + Option + Cmd + Q on macOS)

In the Project Manager, click the Import button to import the project.

../../_images/instancing_import_button.png

No pop-up que aparecer, clique o botão explorar e navegue até a pasta que você extraiu.

../../_images/instancing_import_browse.png

Clique duas vezes no arquivo ``project.godot ` para abri-lo.

../../_images/instancing_import_project_file.png

Por fim, clique no botão Importar e Editar.

../../_images/instancing_import_and_edit_button.png

The project contains two packed scenes: main.tscn, containing walls against which the ball collides, and ball.tscn. The Main scene should open automatically. If you're seeing an empty 3D scene instead of the main scene, click the 2D button at the top of the screen.

../../_images/instancing_2d_scene_select.webp ../../_images/instancing_main_scene.png

Vamos adicionar uma bola como um filho do nó principal. No painel da Cena, selecione o nó Principal. Depois, clique no ícone de ligação na parte superior do painel da cena. Este botão permite-lhe adicionar uma instância de uma cena como filho do nó atualmente selecionado.

../../_images/instancing_scene_link_button.png

Clique duas vezes na cena da bola para instancia-la.

../../_images/instancing_instance_child_window.png

A bola vai aparecer no canto superior esquerdo da tela.

../../_images/instancing_ball_instanced.png

Clique nela e arraste-a para o centro da tela.

../../_images/instancing_ball_moved.png

Play the game by pressing F5 (Cmd + B on macOS). You should see it fall.

Now, we want to create more instances of the Ball node. With the ball still selected, press Ctrl + D (Cmd + D on macOS) to call the duplicate command. Click and drag to move the new ball to a different location.

../../_images/instancing_ball_duplicated.png

Você pode repetir esse processo até que você tenha várias bolas na cena.

../../_images/instancing_main_scene_with_balls.png

Jogue o jogo novamente. Agora você deve ver cada bola cair de forma independente uma da outra. Isso é o que instâncias fazem. Cama uma é uma reprodução independente de uma cena modelo.

Editando cenas e instâncias

Instâncias fazem mais do que isso. Com essa funcionalidade, você pode:

  1. Altere as propriedades de uma bola sem afetar as outras usando o Inspetor.

  2. Change the default properties of every Ball by opening the ball.tscn scene and making a change to the Ball node there. Upon saving, all instances of the Ball in the project will see their values update.

Nota

Mudar uma propriedade em uma instância sempre terá prioridade sobre os valores da Cena Empacotada correspondente.

Let's try this. Open ball.tscn and select the Ball node. In the Inspector on the right, click on the PhysicsMaterial property to expand it.

../../_images/instancing_physics_material_expand.webp

Set its Bounce property to 0.5 by clicking on the number field, typing 0.5, and pressing Enter.

../../_images/instancing_property_bounce_updated.webp

Jogue o jogo pressionando F5 e observe como todas as bolas agora saltam muito mais. Como a cena Ball é um modelo para todas as instâncias, modificá-la e salvá-la faz com que todas as instâncias sejam atualizadas de acordo.

Agora vamos ajustar uma instância de forma individual. Clique na aba correspondente acima da janela de exibição para voltar para a cena Main.

../../_images/instancing_scene_tabs.png

Selecione um dos nós Ball instanciados e, no Inspetor, mude sua Escala de Gravidade para 10.

../../_images/instancing_property_gravity_scale.png

Um botão cinza de "reverter" aparecerá perto da propriedade ajustada.

../../_images/instancing_property_revert_icon.png

Este ícone indica que você está substituindo um valor da cena empacotada de origem. Mesmo que você modifique a propriedade na cena original, a substituição do valor será preservada na instância. Clicar no ícone de reversão restaurará a propriedade para o valor na cena salva.

Rode o jogo de novo e perceba que essa bola agora caí muito mais rápida que as outras.

Nota

Se você mudar um valor no PhysicsMaterial de uma instância, isso afetará todas as outras. Isso é porque PhysicsMaterial é um recurso, e recursos são compartilhados entre instâncias. Para fazer um recurso único para uma instância, clique nele com o botão direito no Inspetor e clique Tornar Único no menu contextual.

Recursos são outro bloco de construção essencial de jogos Godot que cobriremos em uma lição posterior.

Instâncias de cena como linguagem de design

Instâncias e cenas no Godot oferecem uma excelente linguagem de design, distinguindo a engine de outras. Concebemos o Godot em torno deste conceito desde o início.

Nós recomendamos ignorar padrões de código de arquitetura, tal como o Model-View-Control (MVC) ou diagramas Relação-Entidade, ao fazer jogos com Godot. Ao invés disso, você pode começar imaginando os elementos que jogadores verão em seu jogo e estruturar seu código ao redor deles.

Por exemplo, você pode dividir um jogo de tiro da seguinte forma:

../../_images/instancing_diagram_shooter.png

Você pode criar um diagrama assim para quase qualquer tipo de jogo. Cada retângulo representa uma entidade que é visível no jogo na perspectiva do jogador. As setas indicam qual cena possui qual.

Once you have a diagram, we recommend creating a scene for each element listed in it to develop your game. You'll use instancing, either by code or directly in the editor, to build your tree of scenes.

Os programadores tendem a gastar muito tempo projetando arquiteturas abstratas e tentando encaixar componentes nelas. O design baseado em cenas torna o desenvolvimento mais rápido e direto, permitindo que você se concentre na própria lógica do jogo. Como a maioria dos componentes do jogo é mapeada diretamente para uma cena, usar um design baseado em instanciamento de cenas significa que você precisará de muito menos código arquitetural.

Aqui está o exemplo de um diagrama de cena para um jogo de mundo aberto com muitos assets e elementos aninhados:

../../_images/instancing_diagram_open_world.png

Imagine que começamos criando a sala. Poderíamos fazer algumas cenas de salas diferentes, com arranjos únicos de móveis nelas. Mais tarde, poderíamos fazer uma cena de casa que usa várias instâncias de sala para o interior. Criaríamos uma cidadela a partir de muitas casas instanciadas e um grande terreno no qual colocaríamos a cidadela. Cada uma delas seria uma cena que instancia uma ou mais subcenas.

Mais tarde, poderíamos criar cenas representando guardas e adicioná-los à cidadela. Eles seriam adicionados indiretamente ao mundo geral do jogo.

Com Godot, é fácil iterar em seu jogo assim, pois tudo o que você precisa fazer é criar e instanciar mais cenas. Nós fizemos o editor ser mais acessível a programadores, designers e artistas. Um processo típico de desenvolvimento de equipe pode envolver artistas 2D ou 3D, designers de níveis, designers de jogos e animadores, todos trabalhando com o editor Godot.

Resumo

Instancing, the process of producing an object from a blueprint, has many handy uses. With scenes, it gives you:

  • A capacidade de dividir seu jogo em componentes reutilizáveis.

  • Uma ferramenta para estruturar e encapsular sistemas complexos.

  • Uma linguagem para pensar sobre a estrutura do seu projeto de jogo de uma forma natural.