Cenas e nós de cena

Esta página foi traduzida automaticamente e pode conter erros. Encontrou um problema? Use o link "Edit this page" para ajudar a corrigir.

Cenas

Uma cena é uma árvore de nós que representa algo no seu jogo — uma fase, um menu, um personagem, uma tela de interface. As cenas são salvas como arquivos .prefab em qualquer lugar de Assets/:

Assets/
  scene-01.prefab       ← a cena inicial de um projeto novo
  Levels/
    forest.prefab
  Enemies/
    grunt.prefab

A cena inicial é a primeira carregada quando o jogo começa. Ela é definida nas Player Settings do projeto.

Crie uma cena pelo painel Assets: clique com o botão direito em uma pasta → New → Scene. Clique duas vezes em uma cena para abri-la; cada cena aberta ganha uma aba no topo da janela.

Nós

Um nó é um único elemento de uma cena. Os nós são organizados em uma árvore: cada nó tem um pai e qualquer número de filhos, e transformar um pai transforma também os filhos.

Main Scene
├── Camera
├── Sun
├── Ground
│   ├── Tree        (move-se com Ground)
│   └── Rock
└── Player
    └── Weapon

Todo nó tem um Transform — posição, rotação (ângulos de Euler em graus, guardados como quatérnio) e escala. Um nó vazio também é útil: como ponto de surgimento, pivô, ou pai que agrupa outros nós.

Trabalhando com nós no Studio

No painel Scene Tree:

  • Clique em um nó para selecioná-lo; o Inspector mostra seu transform e seus componentes.
  • Botão direito para New Node, New Child Node, Rename, Delete, Copy e Paste.
  • F2 renomeia, Delete exclui e D duplica o nó selecionado.
  • Arraste um script do painel Assets sobre um nó para adicionar esse componente.

Na visualização Scene, selecione um nó e use as ferramentas Move (W), Rotate (E) e Scale (R); F enquadra a seleção. Veja Gizmos.

Salve com Ctrl+S (ou Ctrl+Shift+S para salvar todos os documentos abertos).

Nós no código

public override void OnStart()
{
    var node = Node!;                                  // o nó deste componente
    node.Name = "Player";
    node.Transform.Position = new Vector3(0, 1, 0);

    foreach (var child in node.Children)               // filhos diretos
        child.IsActive = true;

    var light = node.GetComponent<LightComponent>();   // null quando não existe
    foreach (var mesh in node.GetComponentsInChildren<ModelComponent>())
        mesh.IsActive = false;
}

Para criar objetos novos em tempo de execução, instancie um prefab — veja Instanciando cenas.

O arquivo de cena no disco

Um arquivo .prefab guarda a árvore inteira em JSON, legível e fácil de comparar. Cada objeto tem um __TypeId — um id estável do seu tipo C# — para que as cenas sobrevivam a renomeações e mudanças de namespace:

{
  "__TypeId": "a3000000-0000-4000-8000-000000000002",
  "IsActive": true,
  "Name": "Main Scene",
  "Children": [
    {
      "__TypeId": "a3000000-0000-4000-8000-000000000002",
      "IsActive": true,
      "Name": "Camera",
      "Children": [],
      "Components": [
        { "__TypeId": "a3000001-0000-4000-8000-000000000001", "FieldOfViewDegrees": 60, "NearPlane": 0.01, "FarPlane": 100 }
      ],
      "Transform": {
        "Position": { "X": 0, "Y": 2, "Z": -6 },
        "Orientation": { "X": 0, "Y": 0, "Z": 0, "W": 1 },
        "Scale": { "X": 1, "Y": 1, "Z": 1 }
      },
      "Id": "e0224d28-0849-45fc-a09c-ba8645113a9e"
    }
  ],
  "Components": [],
  "Id": "7d1f4c2a-…"
}

Raramente você precisará editar cenas à mão, mas o formato facilita revisar mudanças no Git e resolver conflitos de merge.


← Toda a documentação Editar esta página