Cenas e nós de cena
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.