Beleza, aqui está TUDO compilado em um único guia — completo, direto e objetivo,
estilo Gen Z pra tu mergulhar no mundo da programação na Unity com tudo
explicadinho:
Unity Programming Guide – Palavras-
chave, Sistemas e Estrutura
1. Tipos de Dados Comuns
• int → número inteiro (ex: int vidas = 3;)
• float → número decimal, sempre com f (ex: float velocidade = 5.5f;)
• bool → verdadeiro/falso (ex: bool vivo = true;)
• string → texto entre aspas (ex: string nome = "Saske";)
• char → caractere único (ex: char letra = 'A';)
• Vector2 / Vector3 → vetores 2D/3D pra posição, direção (ex: new
Vector3(0,1,0);)
2. Palavras-chave da Linguagem C#
• public / private → visibilidade da variável ou método
• void → função que não retorna nada
• return → retorna valor (em funções que retornam algo)
• if / else / switch → estruturas condicionais
• for / while / foreach → loops de interação
• new → instancia objetos (ex: new GameObject())
• class → declaração de classe (ex: public class Player : MonoBehaviour)
3. Unity Specific
• MonoBehaviour → classe base dos scripts Unity
• Start(), Update(), FixedUpdate() → eventos automáticos da Unity
• Transform → controla posição, rotação, escala
• [Link] → tempo entre frames, pra movimento frame-rate
independente
• Rigidbody → adiciona física (gravidade, colisões)
• Collider → detecção de colisões (Box, Sphere, Mesh…)
• Animator → controla animações via parâmetros
• AudioSource → reproduz sons
• Camera → visão da cena ou jogador
4. Exemplos de Combinação (Junções)
👉 Exemplo: Movimento com Translate
public float velocidade = 5f;
void Update() {
float x = [Link]("Horizontal") * velocidade *
[Link];
float z = [Link]("Vertical") * velocidade *
[Link];
[Link](x, 0, z);
}
• public float → variável editável no Inspector
• Update() → roda todo frame
• [Link]() → pega input WASD ou setas
• [Link]() → move o objeto
👉 Exemplo: Detector de Colisão com Inimigo
void OnCollisionEnter(Collision col) {
if ([Link] == "Inimigo") {
vida -= 10;
}
}
• OnCollisionEnter() → evento automático da Unity
• Collision → objeto que representa a colisão
• tag → rótulo pra identificar objetos
👉 Exemplo: Função de Tomar Dano
public void TomarDano(int dano) {
vida -= dano;
if (vida <= 0) {
Morrer();
}
}
void Morrer() {
Destroy(gameObject);
}
• public void → método visível e que não retorna nada
• int dano → parâmetro tipo inteiro
• Destroy() → remove o objeto da cena
5. Sistemas de Gameplay Comuns
💥 Sistema de Dano / Vida
public int vida = 100;
public void TomarDano(int dano) {
vida -= dano;
if (vida <= 0) {
Morrer();
}
}
void Morrer() {
Destroy(gameObject);
}
🎒 Inventário Básico
public List<string> inventario = new List<string>();
void ColetarItem(string item) {
[Link](item);
[Link]("Item coletado: " + item);
}
void MostrarInventario() {
foreach (string item in inventario) {
[Link]("Tem: " + item);
}
}
🎭 Sistema de Animação com Animator
Animator anim;
void Start() {
anim = GetComponent<Animator>();
}
void Update() {
float mover = [Link]("Vertical");
[Link]("Velocidade", [Link](mover));
if ([Link]([Link])) {
[Link]("Pular");
}
}
No Animator Controller: parâmetros Velocidade (float) e Pular (trigger).
6. Conhecimentos Essenciais pra Melhorar
⚙️ Conceitos Fundamentais
• Variáveis, funções, condicionais, loops, listas, objetos, herança,
Start/Update/FixedUpdate
🧩 Sistemas Comuns de Gameplay
• Dano/Vida, Inventário, Coleta, Crafting, Save/Load (PlayerPrefs), UI/HUD,
Animações, Sons, Inimigos (IA simples), Diálogos
🏛️ Sistemas Base Comuns em Jogos Maiores
• Missões, XP/Level, tempo (dia/noite), crafting e construção, status (fome, sede,
energia), geração procedural, spawner de NPCs/inimigos
🔄 Interação entre Objetos
• OnTriggerEnter / OnCollisionEnter, CompareTag(),
FindObjectOfType<T>(), Invoke(), Coroutines pra espera
🔍 Conceitos Avançados
• Coroutines (yield return), Singleton (GameManager único),
ScriptableObjects, Delegates/Eventos, NavMesh (IA), Raycast (mira/visão), Lerp
/ SmoothDamp (movimentos suaves)
🧼 Boas Práticas / Organização
• Código modular: separar por arquivos
• Nomeação clara (variáveis, métodos)
• Evitar lógica pesada dentro do Update()
• Reutilizar com funções
• Comentar o importante, manter estruturado
🛠️ Ferramentas da Unity
• Console: erros e logs
• Profiler: performance
• Inspector: editar variáveis em tempo real
• Gizmos: debug visual na cena
• Visual Studio: IDE com IntelliSense
7. Por que cada coisa importa?
• Saber os tipos e palavras-chave é o mínimo pra programar
• Unity-specific (como MonoBehaviour, Update, Animator) são a cola do game
• Entender como combinar input, movimento, colisões, animações te ajuda a
criar gameplay real
• Criar sistemas como inventário, dano, crafting faz o jogo funcionar como um
jogo de verdade
• Coroutines, Singletons e ScriptableObjects permitem código mais limpo,
modular e escalável
• Boas práticas e uso de ferramentas te salvam de bugs e te fazem ganhar tempo
Fechou! Aqui vai o guia completo e direto pra tu criar um sistema de inventário com
slots visuais na tela na Unity (em C# + UI), com funções de adicionar, usar e
deitar/jogar fora os itens. É tipo os jogos de sobrevivência ou RPG mesmo.
🎒 SISTEMA DE INVENTÁRIO NA UNITY —
GUIA COMPLETO
📦 1. Estrutura Básica
Cria um script chamado [Link] com a definição de um item simples:
using UnityEngine;
[[Link]]
public class Item {
public string nome;
public Sprite icone;
public bool consumivel;
}
🎯 2. Script do Inventário ([Link])
using [Link];
using UnityEngine;
public class Inventario : MonoBehaviour
{
public static Inventario instancia;
public List<Item> itens = new List<Item>();
public int tamanhoMaximo = 20;
private void Awake() {
instancia = this;
}
public bool AdicionarItem(Item novoItem) {
if ([Link] >= tamanhoMaximo) return false;
[Link](novoItem);
[Link]();
return true;
}
public void UsarItem(int index) {
if (index >= [Link]) return;
Item item = itens[index];
[Link]("Usou item: " + [Link]);
if ([Link]) {
[Link](index);
[Link]();
}
}
public void DeitarItem(int index) {
if (index >= [Link]) return;
[Link]("Jogou fora o item: " + itens[index].nome);
[Link](index);
[Link]();
}
}
🖼️ 3. Interface Visual ([Link])
using UnityEngine;
using [Link];
public class UIInventario : MonoBehaviour
{
public static UIInventario instancia;
public Transform slotsPai;
public GameObject prefabSlot;
private void Awake() {
instancia = this;
}
public void AtualizarUI() {
foreach (Transform filho in slotsPai) {
Destroy([Link]);
}
for (int i = 0; i < [Link]; i++) {
GameObject slot = Instantiate(prefabSlot, slotsPai);
[Link](0).GetComponent<Image>().sprite
= [Link][i].icone;
int index = i;
[Link](1).GetComponent<Button>().[Link]
r(() => {
[Link](index);
});
[Link](2).GetComponent<Button>().[Link]
r(() => {
[Link](index);
});
}
}
}
🧱 4. Criando a UI no Unity (Canvas)
No Unity, faz isso:
1. Cria um Canvas → Panel (ex: chamado "InventarioPanel")
2. Dentro do painel:
a. Cria um Empty GameObject (nomeia de "SlotsPai") com Horizontal
Layout Group
b. Marca Child Force Expand = false
3. Cria um PrefabSlot com:
a. Imagem do item (Image)
b. Botão "Usar" (Button)
c. Botão "Deitar" (Button)
4. Linka tudo nos campos do script UIInventario
✅ 5. Exemplo de Uso no Jogo
public class Coletor : MonoBehaviour
{
public Item itemColetavel;
private void OnTriggerEnter(Collider other) {
if ([Link]("Player")) {
[Link](itemColetavel);
Destroy(gameObject);
}
}
}
📌 6. Resultado
• Cada item tem nome e ícone
• Tu podes adicionar itens com AdicionarItem()
• No slot da UI:
o Botão "Usar" consome o item
o Botão "Deitar" remove o item da lista
• Inventário visível em tempo real com slots bonitinhos
Demorou! Vou te explicar passo a passo, sem enrolação, como criar um inventário
com slots visuais na tela, que permite adicionar, usar e jogar fora itens. É estilo jogo
de sobrevivência/RPG.
🪜 ETAPA 1 — Criar o tipo "Item"
1.1 Cria um script C# chamado [Link]
Esse script é só a definição de um item:
using UnityEngine;
[[Link]]
public class Item {
public string nome;
public Sprite icone;
public bool consumivel;
}
O que faz:
• nome: nome do item
• icone: imagem que aparece no slot
• consumivel: se o item desaparece ao usar
🪜 ETAPA 2 — Criar o Sistema de Inventário
2.1 Cria um script chamado [Link]
Esse script guarda os itens e tem funções de adicionar, usar e jogar fora:
using [Link];
using UnityEngine;
public class Inventario : MonoBehaviour
{
public static Inventario instancia;
public List<Item> itens = new List<Item>();
public int tamanhoMaximo = 20;
private void Awake() {
instancia = this;
}
public bool AdicionarItem(Item novoItem) {
if ([Link] >= tamanhoMaximo) return false;
[Link](novoItem);
[Link]();
return true;
}
public void UsarItem(int index) {
if (index >= [Link]) return;
Item item = itens[index];
[Link]("Usou item: " + [Link]);
if ([Link]) {
[Link](index);
[Link]();
}
}
public void DeitarItem(int index) {
if (index >= [Link]) return;
[Link]("Jogou fora: " + itens[index].nome);
[Link](index);
[Link]();
}
}
O que faz:
• Guarda os itens em uma lista
• Permite adicionar, usar e deitar item
• Atualiza a interface toda vez que muda
🪜 ETAPA 3 — Criar a Interface Visual (UI)
3.1 Cria um novo script chamado [Link]:
using UnityEngine;
using [Link];
public class UIInventario : MonoBehaviour
{
public static UIInventario instancia;
public Transform slotsPai;
public GameObject prefabSlot;
private void Awake() {
instancia = this;
}
public void AtualizarUI() {
foreach (Transform filho in slotsPai) {
Destroy([Link]);
}
for (int i = 0; i < [Link]; i++) {
GameObject slot = Instantiate(prefabSlot, slotsPai);
[Link](0).GetComponent<Image>().sprite
= [Link][i].icone;
int index = i;
[Link](1).GetComponent<Button>().[Link]
r(() => {
[Link](index);
});
[Link](2).GetComponent<Button>().[Link]
r(() => {
[Link](index);
});
}
}
}
🪜 ETAPA 4 — Montar a UI no Unity (Canvas)
4.1 No Hierarchy:
• Cria um Canvas > Panel (nome: "InventarioPanel")
• Dentro do painel, cria um Empty GameObject chamado SlotsPai
o Adiciona componente Horizontal Layout Group
o Marca Child Force Expand como false
4.2 Cria o PrefabSlot (1 slot de inventário)
1. Cria um GameObject vazio (nome: SlotItem)
2. Dentro dele:
a. Um Image (para o ícone do item)
b. Um Button com texto "Usar"
c. Um Button com texto "Deitar"
3. Organiza esses objetos no prefab e salva ele como Prefab
4.3 Arrasta para os scripts:
• No script [Link], linka:
o slotsPai → aquele Empty GameObject com layout
o prefabSlot → teu prefab com botão e ícone
🪜 ETAPA 5 — Testar o sistema (coletar item)
5.1 Cria um script chamado [Link]
Esse é pra coletar o item ao encostar:
public class Coletor : MonoBehaviour
{
public Item itemColetavel;
private void OnTriggerEnter(Collider other) {
if ([Link]("Player")) {
[Link](itemColetavel);
Destroy(gameObject);
}
}
}
1. Adiciona Collider com IsTrigger ativado
2. Coloca esse script no item de cena (tipo “Coco”)
3. No Inspector, linka um item com ícone e nome
✅ O QUE TU TERÁ NO FINAL
✔ Inventário visual com slots na tela
✔ Cada slot mostra o ícone do item
✔ Botão “Usar” consome (se for consumível)
✔ Botão “Deitar” remove da lista
✔ Sistema organizado e expansíve