Unity Essencial
Um checklist dos fundamentos do Unity: a arquitetura GameObject/Component, o ciclo de vida do MonoBehaviour, prefabs, física, UI e build. Cada tópico em poucas linhas, com as armadilhas. Se algo soar novo, o ponteiro → aprofunde em… indica a apostila completa.
O formato "Essencial"
Densa, sem rodeios, feita para ser varrida.
- Leia rápido. Se você já faz, siga. Se travou, é sinal de estudar/praticar.
- → aprofunde em…: Unity (completa), C#, Blender 3D, Computação Gráfica & Three.js.
- Unity é um editor + engine: você monta a cena no editor e escreve o comportamento em C#.
- Caixas ⚠️: o que causa bugs difíceis ou perda de trabalho. Checklist final para marcar.
Conceitos: GameObject + Component
Tudo na cena é um GameObject; o que ele faz vem dos Components. → aprofunde em Unity
| Conceito | O mínimo |
|---|---|
| GameObject | contêiner vazio com um Transform; ganha comportamento adicionando Components (Renderer, Collider, scripts…) |
| Component | peça reutilizável de dados+lógica anexada a um GameObject. Composição > herança |
| Scene | um "nível"/tela; contém a hierarquia de GameObjects. Salve sempre (Ctrl+S) |
| Prefab | um GameObject salvo como asset reutilizável (inimigo, bala, botão) — editar o prefab atualiza todas as cópias |
| Asset | arquivo em Assets/ (modelo, textura, áudio, script, material, prefab) |
| Inspector | edita os Components do objeto selecionado; campos [SerializeField] aparecem aqui |
- Mudanças em Play Mode são descartadas ao sair. Ajuste valores fora do Play, ou anote e reaplique. (Dá para pintar o Play Mode de outra cor em Preferences.)
- Versione os arquivos
.meta. Cada asset tem um.metacom seu GUID; sem ele, referências quebram para o time. Use o.gitignorede Unity (ignoraLibrary/,Temp/,Logs/) + Git LFS para binários.
✔️ Auto-checagem
O que distingue GameObject de Component? O que é um Prefab e o que acontece ao editá-lo? Por que mudanças em Play Mode somem? O que versionar (e o que ignorar) em Git?
Transform e navegação da cena
Position/Rotation/Scale, local vs world, e mexer na Scene View. → aprofunde em Unity
Q pan (hand) W mover E girar R escalar T rect Y transform combinado F enquadrar o objeto selecionado RMB + WASD/QE voar pela cena (Shift acelera) | Alt+LMB orbitar | scroll zoom Ctrl (arraste) snap por incremento | V vertex snap
- Local vs World:
transform.position(world) vstransform.localPosition(relativo ao pai). O toggle Pivot/Center e Local/Global na barra muda como o gizmo se comporta. - Parenting: arraste na Hierarchy; o filho herda transform do pai. Cuidado: escalas não-uniformes no pai distorcem filhos rotacionados.
- Unidades: 1 unidade Unity = 1 metro (importante para física e para bater com modelos do Blender — exporte em escala real).
- Reset: no menu de contexto do Transform → Reset zera para 0/0/1.
✔️ Auto-checagem
Atalhos W/E/R e como voar pela cena. position vs localPosition. O que o toggle Pivot/Center muda? Quanto vale 1 unidade Unity?
Componentes centrais
Os que você usa em quase todo objeto. → aprofunde em Unity
| Component | Para |
|---|---|
| Mesh Filter + Mesh Renderer | a geometria + como ela é desenhada (materiais, sombras, light probes) |
| Collider (Box/Sphere/Capsule/Mesh) | forma para colisão. Is Trigger = detecta sobreposição sem empurrar |
| Rigidbody | coloca o objeto sob a física (gravidade, forças). Sem ele, não há resposta física de verdade |
| Camera | o que é renderizado; projection (perspective/ortho), clipping planes, culling mask |
| Light | Directional (sol), Point, Spot, Area (baked); modo Realtime/Baked/Mixed |
| AudioSource / AudioListener | emite som (2D/3D, spatial blend) / "ouve" (um só, geralmente na câmera) |
| Canvas | raiz de toda UI (ver seção 07) |
✔️ Auto-checagem
Qual a diferença entre um Collider comum e um com Is Trigger? O que um Rigidbody adiciona? Para que serve o AudioListener e quantos deve haver?
Scripting: MonoBehaviour
Um script que herda de MonoBehaviour é um Component. O ciclo de vida é o núcleo. → aprofunde em Unity · C#
Awake() 1x, ao criar o objeto — inicialize referências próprias OnEnable() toda vez que o componente é ativado Start() 1x, antes do 1º Update — use para acessar OUTROS objetos (já passaram por Awake) Update() todo frame — input, lógica de jogo (multiplique por Time.deltaTime!) FixedUpdate() passo fixo — TODA física / Rigidbody (AddForce, velocity) LateUpdate() depois de todos os Update — câmera seguindo o player OnDestroy() ao destruir — limpe eventos, timers
public class Mover : MonoBehaviour {
[SerializeField] float speed = 5f; // privado, mas editável no Inspector
Rigidbody rb;
void Awake() { rb = GetComponent<Rigidbody>(); } // cache: NÃO chame em Update
void Update() {
float h = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * h * speed * Time.deltaTime);
}
}
Time.deltaTime: multiplique movimento/rotação por ele emUpdatepara ficar independente de FPS.- Cache
GetComponentemAwake/Start; chamá-lo todo frame é lento. [SerializeField] private>public: expõe no Inspector sem quebrar encapsulamento.- Coroutines (
IEnumerator+yield return): ações ao longo do tempo (esperar, animar em passos) sem travar o frame. - Eventos:
UnityEvent(liga no Inspector) ou C#event/Actions (código) para desacoplar. - Null reference: o erro mais comum — uma referência do Inspector ficou vazia, ou o objeto foi destruído.
✔️ Auto-checagem
Ordem e propósito de Awake / Start / Update / FixedUpdate / LateUpdate. Por que física vai em FixedUpdate? Por que multiplicar por Time.deltaTime? Por que cachear GetComponent? [SerializeField] vs public.
Prefabs e instanciação
A unidade de reúso. → aprofunde em Unity
- Criar: arraste um GameObject da Hierarchy para a pasta
Assets/. Vira azul na Hierarchy = instância de prefab. - Editar: abra o prefab (Prefab Mode) — muda todas as instâncias. Ou edite uma instância e faça Overrides > Apply (ou Revert).
- Prefab Variant: um prefab que herda de outro com ajustes (ex.: "InimigoRápido" baseado em "Inimigo").
- Nested prefabs: prefabs dentro de prefabs — suportado.
- Runtime:
Instantiate(prefab, position, rotation)cria cópias em jogo;Destroy(go)remove. Para muitos objetos frequentes (balas), use object pooling em vez de Instantiate/Destroy repetido.
[SerializeField] GameObject bulletPrefab;
[SerializeField] Transform muzzle;
void Fire() {
Instantiate(bulletPrefab, muzzle.position, muzzle.rotation);
}
✔️ Auto-checagem
Como criar um prefab? O que "Apply Override" faz? O que é um Prefab Variant? Por que preferir object pooling a Instantiate/Destroy para balas?
Física e colisões
Regras que confundem todo mundo no começo. → aprofunde em Unity
- Precisa de Rigidbody em pelo menos um dos objetos para gerar eventos de colisão/trigger. Sem Rigidbody, dois Colliders se atravessam sem avisar.
- Colisão sólida →
OnCollisionEnter/Stay/Exit; ambos os Colliders não são triggers. - Trigger (um Collider com Is Trigger) →
OnTriggerEnter/Stay/Exit; passa através, só detecta. - Kinematic Rigidbody: movido por código/animação, não por forças; ainda dispara triggers.
- Mova via física (
rb.MovePosition,rb.velocity,AddForce) em FixedUpdate; movertransformdireto "fura" paredes. - Layers + Collision Matrix (Project Settings > Physics): defina o que colide com o quê — desligue pares desnecessários por performance.
- Raycast:
Physics.Raycast(origin, direction, out hit, maxDistance, layerMask)— tiro hitscan, seleção, "está no chão?". - 2D é separado:
Rigidbody2D,Collider2D,OnCollisionEnter2D,Physics2D.Raycast.
✔️ Auto-checagem
Por que uma colisão não dispara nada? OnCollisionEnter vs OnTriggerEnter. Onde mover um Rigidbody? O que a Collision Matrix controla? Como checar "está no chão"?
UI
Canvas + RectTransform + âncoras. → aprofunde em Unity
- Canvas render mode: Screen Space – Overlay (HUD, padrão), Screen Space – Camera (com efeitos/perspectiva), World Space (UI no mundo 3D).
- RectTransform: âncoras (anchor) prendem os cantos a uma fração do pai; pivot é o ponto de referência do próprio elemento. Modelo mental: âncora define "gruda onde" quando a tela redimensiona.
- Canvas Scaler: modo Scale With Screen Size + Reference Resolution (ex.: 1920×1080) + Match Width/Height → UI escala em telas diferentes.
- Layout Groups (Horizontal/Vertical/Grid) + Content Size Fitter para listas e menus que se ajustam.
- EventSystem: um objeto na cena obrigatório para cliques/toque funcionarem na UI.
- uGUI vs UI Toolkit: uGUI (baseado em GameObjects, maduro, ótimo p/ UI de jogo no mundo) vs UI Toolkit (estilo web, USS/UXML, forte p/ ferramentas de editor) — noção.
✔️ Auto-checagem
Os três render modes do Canvas. O que âncora e pivot fazem no RectTransform? Para que serve o Canvas Scaler + Reference Resolution? O que acontece se faltar o EventSystem?
Assets e render pipeline
Escolha a pipeline cedo; import settings importam. → aprofunde em Unity · Computação Gráfica & Three.js
- Render pipeline: URP (padrão recomendado — multiplataforma, performática, Shader Graph), HDRP (alta fidelidade, PC/console), Built-in (legado). Trocar depois dá trabalho — decida no início do projeto.
- Import settings (Inspector do asset): texturas (Max Size, compressão, sRGB, tipo Normal Map), modelos (Scale Factor, gerar colliders, importar materiais/animação), áudio (Load Type, compressão). Ajuste — os defaults inflam o build.
- Material + Shader: material = instância de um shader com valores; em URP use Lit/Unlit ou crie no Shader Graph.
- Lighting: Realtime (dinâmico, caro), Baked (assado no lightmap, estático e barato), Mixed. Light Probes iluminam objetos dinâmicos com luz assada; Reflection Probes para reflexos locais. Faça o bake (Window > Rendering > Lighting).
- Sprite Atlas (2D): agrupa sprites para reduzir draw calls.
- Static flag: marque objetos imóveis como Static → batching, occlusion culling, lightmapping.
✔️ Auto-checagem
URP vs HDRP vs Built-in — qual escolher e por que decidir cedo? O que import settings afetam? Realtime vs Baked vs Mixed lighting. O que Light Probes resolvem? Para que serve a flag Static?
Build e otimização
Medir antes de otimizar; o Profiler é o juiz. → aprofunde em Unity
- Build Settings (Ctrl+Shift+B): plataforma, lista de Scenes in Build (a cena 0 é a que abre), Development Build (liga Profiler/logs).
- Profiler (Window > Analysis > Profiler): CPU, GPU, Memory, Rendering. Ache o pico de frame e o que o causa antes de mexer em qualquer coisa.
- Draw calls / batching: menos materiais, Static batching (objetos estáticos), SRP Batcher (URP/HDRP), GPU Instancing para muitos objetos iguais, atlas de texturas.
- Object pooling: reutilize objetos em vez de
Instantiate/Destroyconstante (evita GC spikes). - GC / alocações: evite alocar em
Update(LINQ,new, boxing,string +); cause menos garbage. - Quality Settings + níveis por plataforma; resolução, sombras, LOD Groups, occlusion culling.
- Addressables (noção): sistema moderno de carregar assets sob demanda; prefira a
Resources/(que incha o build e não escala).
✔️ Auto-checagem
O que precisa estar na lista Scenes in Build? Qual ferramenta usar antes de otimizar? Três formas de reduzir draw calls. Por que evitar alocações em Update? Addressables vs Resources/.
O resto do essencial
Itens que aparecem sempre.
| Tópico | O mínimo |
|---|---|
| Input System (novo) | Input Actions asset + callbacks; substitui Input.GetAxis (antigo). Suporta rebinding, multi-device. Escolha um dos dois no início |
| ScriptableObject | asset de dados puro (config, tabelas, eventos) — desacopla dados de cena; menos singletons |
| Tags & Layers | Tag = identificar ("Player"); Layer = física/render/culling. Não abuse de CompareTag em loops quentes |
| Gizmos | OnDrawGizmos() desenha ajudas visuais no editor (raios, ranges) — ótimo para depurar |
| Console | Debug.Log/Warning/Error; "Clear on Play", "Error Pause", "Collapse". Clique no log salta para a linha |
| Assembly Definitions | (.asmdef) dividem o código em módulos → compilação mais rápida, dependências explícitas — noção |
| Package Manager | Window > Package Manager: pacotes oficiais (Cinemachine, TextMeshPro, Input System, URP) e do registro |
| Version control | .gitignore de Unity (ignora Library/, Temp/, Logs/, Build/); Git LFS p/ binários; force text serialization (já é o padrão); versione .meta |
| Cinemachine | câmeras "inteligentes" (follow, look-at, blends) sem escrever código de câmera — pacote |
✔️ Auto-checagem
Input System novo vs antigo. Para que serve um ScriptableObject? Tag vs Layer. O que OnDrawGizmos faz? O que ignorar no .gitignore de Unity?
Checklist final do Unity
Se você marca todos, tem o básico operacional. Onde travar, volte à seção.
- a arquitetura GameObject + Component (composição sobre herança) e o que é uma Scene
- o que é um Prefab, editar em Prefab Mode, Overrides Apply/Revert, Variants
- que mudanças em Play Mode são descartadas
- versionar
.meta, ignorarLibrary//Temp/, usar Git LFS - navegar a Scene View (Q/W/E/R, F, RMB+WASD) e local vs world (
positionvslocalPosition) - 1 unidade = 1 metro; casar escala com modelos importados
- componentes centrais: Mesh Renderer, Collider (+ Is Trigger), Rigidbody, Camera, Light, AudioSource/Listener, Canvas
- o ciclo de vida do MonoBehaviour: Awake → OnEnable → Start → Update / FixedUpdate / LateUpdate → OnDestroy
- física em FixedUpdate; multiplicar movimento por
Time.deltaTimeem Update - cachear
GetComponent; usar[SerializeField] private; noção de Coroutines e UnityEvent - colisão precisa de Rigidbody;
OnCollisionEntervsOnTriggerEnter; Layers & Collision Matrix; Raycast; 2D é separado Instantiate/Destroye por que preferir object pooling para objetos frequentes- UI: Canvas render modes, RectTransform (âncora/pivot), Canvas Scaler + Reference Resolution, EventSystem
- escolher a render pipeline (URP por padrão) cedo; import settings; lighting Realtime/Baked/Mixed + Light Probes; flag Static
- Build Settings (Scenes in Build), o Profiler, reduzir draw calls (batching/SRP Batcher/instancing), evitar alocações em Update
- Input System (novo vs antigo), ScriptableObject, Tags & Layers, Gizmos, Package Manager,
.gitignorede Unity
Aprofundamento: Unity (completa) · C# · Blender 3D · Computação Gráfica & Three.js.