002 Apostila de Unity e C Sharp

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 204

Aprenda Programar - Linguagem C#

Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Copyright © 2022 de Tito Petri


Todos os direitos reservados. Este ebook ou qualquer parte dele não pode
ser reproduzido ou usado de forma alguma sem autorização expressa, por
escrito, do autor ou editor, exceto pelo uso de citações breves em uma
resenha do ebook.

Primeira edição, 2020


ISBN 0-5487263-1-5
www.titopetri.com.br

Tito Petri © 2022 - Todos os Direitos Reservados. 2


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Criação de Games com Unity Engine e Linguagem C#


por Tito Petri

Índice
Links para Download 9
Criando um Novo Projeto no Unity 10
Janelas e Editores 12
Restaurando o Layout Original 13
Estrutura do Projeto 14
Editor de Cena e Navegação 3D 15
Adicionando um Novo Objeto na Cena 17
Menu Inspetor e Componentes 18
Adicionando um Material 19
Criando um novo Script em C# 20
Configurando o Visual Studio como Editor 23
Evento Comentário e Print 25
Executando um Script 26
Monitorando o Console 27
Monitorando Erros 28
Declaração de Variáveis 30
Operadores Aritméticos e Unários 31
Funções Matemáticas 32
Números Aleatórios - Random 33
Operações com Strings 34
Operadores Lógicos 35
Operadores de Comparação 36
Condição If Else 37

Tito Petri © 2022 - Todos os Direitos Reservados. 3


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo do Par ou Ímpar 40


Jogo do JoKenPô 41
Listas ou Arrays 43
ArrayLists 44
Loop de Repetição For 45
Matriz Multidimensional 47
Sorteio de Nomes 49
Buscar Nome na Lista 50
Métodos Funções e Procedimentos 51
Modificadores de Acesso 52
Declaração de Classe 53
Inputs de Mouse e Teclado 54
Acessando Propriedades 55
Game Object e Set Active 57
Acessando Componentes 58
Acessando Materiais 59
Jogo da Velha - TicTacToe 60
Movimentação Lateral 64
Movimentação 3D do Jogador 66
Hierarquia de Cena 68
Camera LookAt 70
Camera Follow 71
Girar Item 72
Meu Primeiro Game Completo 73
Múltiplas Câmeras 77
Criando uma Nova Cena 79
Interface Menu Inicial - GUI 80

Tito Petri © 2022 - Todos os Direitos Reservados. 4


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Array de Moedas - Linha 82


Array de Moedas - Random 83
Array de Moedas - Ring 84
Array de Moedas - Grade 2D 85
Inimigo - Movimento Circular 86
Inimigo - Movimento Bounce 87
Inimigo - Movimento Follow 89
Colidir com Inimigo 91
Efeito de Dano e Impulso 92
Pulo e Estados do Pulo 93
Pisca Material - Single 94
Pisca Múltiplos Materiais 95
AudioSource e AudioClip - Sons e Música 96
Evento GameOver 97
Ação de Atirar 98
Script do Projétil e Partículas 99
Script MovePlayer - Game Felpudo Adventure Versão 1.0 100
Porta Abre e Fecha - FBX com Animação 108
Porta Abre e Fecha - Animator 109
Character Controller Básico 111
Relógio com Minutos e Segundos - Contagem Regressiva 112
Flappy Bird 3D 116
Unity 2D - Menu Inicial Botão e Transição entre Telas 127
Jogo do JokemPo - Transição entre Telas e Personagens 130
Cena JoKenPo - Parte I 137
Jo Ken Pô com Unity 2D - Projeto Final 146
Texto com Efeito de Máquina de Escrever 162

Tito Petri © 2022 - Todos os Direitos Reservados. 5


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operações com Vetores - Avançado 165


Serialized Field e Mathf.Lerp 167
Movimento Player Normalizado (Teclado) 169
Movimento Player Normalizado (Joystick) 171
Jogo da Memória com Unity 2D 173
Genius (Simon) em Unity 2D 181
FlappyBird em Unity2D 187

Tito Petri © 2022 - Todos os Direitos Reservados. 6


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Links para Download


Para realizar este treinamento você precisa ter Unity e do Visual Studio
Instalados. Ambos são gratuitos e funcionam em todas as plataformas
(Windows Mac e Linux).

Para baixar o Unity, baixe primeiro o Unity HUB (aplicativo que fará o
download, instalação e gerenciamento dos seus projetos no Unity 2019).

Download Unity Hub


https://unity3d.com/get-unity/download

Para editar os Scripts do Unity você pode usar até mesmo o Bloco de
Notas. Porém é recomendável que você use o Visual Studio IDE para
projetos em Linguagem C#. Ele tem vários recursos que vão nos ajudar a
programar em C# e debugar nossos projetos no Unity.

Download Visual Studio 2019


https://visualstudio.microsoft.com/downloads/

Outro poderoso editor de texto gratuito (para qualquer linguagem de


programação) que recomendo, é o Sublime Text.

Download Sublime Text (opcional)


https://www.sublimetext.com/3

Tito Petri © 2022 - Todos os Direitos Reservados. 7


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Criando um Novo Projeto no Unity

Ao abrir o Unity pela primeira vez, você vai se deparar com esta tela do
Unity Hub.

Aqui podemos gerenciar as Instalações de diferentes versões do Unity,


nossos projetos recentes, além de poder estar logado com sua conta no
Unity Connect para realizar backup de dados na nuvem.

Para criar um novo projeto, clique em New e crie um projeto em 3D.

Tito Petri © 2022 - Todos os Direitos Reservados. 8


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Dê um Nome para o seu projeto e escolha um diretório para salvá-lo.

Após clicar no botão Create, aguarde alguns minutos até que o editor crie
todos os arquivos e pastas necessários para o projeto iniciar.

Após este processo, o editor do Unity vai abrir e estamos prontos para
começar.

Tito Petri © 2022 - Todos os Direitos Reservados. 9


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Janelas e Editores

Principais Editores:
● Scene - Editor Visual da Cena 3D
● Hierarchy - Objetos existentes na cena aberta
● Project - Arquivos e diretórios que compõe o projeto
● Inspector - Propriedades do objeto selecionado
● Console - Mensagens de status, alertas e debug

Atalho útil:
Shift + Espaço Maximizar Janela Ativa (em foco)

Tito Petri © 2022 - Todos os Direitos Reservados. 10


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Restaurando o Layout Original


Se perder ou fechar algum dos painéis e quiser restaurar o layout original
do programa, acesse a opção Window > Layouts > Revert Factory
Settings

Neste mesmo menu, podemos alternar também entre outros tipos de


Layouts. Isto se refere apenas à organização das janelas e painéis
principais.

Tito Petri © 2022 - Todos os Direitos Reservados. 11


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Estrutura do Projeto

Na aba project, podemos explorar a estrutura de pastas do nosso projeto.

Com o botão direito (Reveal em Finder no Mac ou Show in Explorer no


Windows) podemos acessar os arquivos na sua pasta original em seu
sistema operacional.

Podemos ignorar todas as pastas e nos atentar apenas à pasta Assets,


que é onde ficarão todos os arquivos e recursos do nosso jogo (modelos
3D, sons, gráficos, telas e botões).

Por padrão, também foi criado um arquivo chamado SampleScene.unity


que é a nossa cena em 3D que está aberta na aba Scene.

Tito Petri © 2022 - Todos os Direitos Reservados. 12


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Editor de Cena e Navegação 3D

Estas os atalhos das ferramentas para navegar por dentro de uma cena
3D e manipular os objetos.

Atalhos de Navegação
Orbit Alt + Clique Esquerdo

Pan Click do Scroll

Zoom Scroll

F Zoom no objeto selecionado

Z Alinhamento do Pivot (Object / Center)

X Orientação do Pivot (Local / World)

Tito Petri © 2022 - Todos os Direitos Reservados. 13


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Gizmos de Manipulação

Q Pan

W Move

E Rotate

R Scale

T Rect Tool

Y Move Rotate Scale (segure Shift para View Align)

Outros Comandos úteis no Editor:

Ctrl + P Executar Aplicação (Play / Stop)

Shift + Espaço Tela Cheia na Janela Ativa (em foco)

Ctrl + D Duplicar

Ctrl + N Novo Node - Empty

Tito Petri © 2022 - Todos os Direitos Reservados. 14


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Adicionando um Novo Objeto na Cena

Na aba Hierarchy, clique no ícone + para adicionar novos objetos à cena.

Tito Petri © 2022 - Todos os Direitos Reservados. 15


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Menu Inspetor e Componentes


Aqui é onde podemos acessar todas as Propriedades (parâmetros e
componentes) do objeto selecionado.

Tito Petri © 2022 - Todos os Direitos Reservados. 16


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Adicionando um Material

Para adicionar um Novo Material, basta clicar no ícone + na aba Project.

Perceba que um novo arquivo de material foi adicionado ao projeto.

Para adicionar o Material à um objeto, basta arrastar o material de dentro


da aba Project, para cima do objeto, na aba Scene ou Hierarchy.

Tito Petri © 2022 - Todos os Direitos Reservados. 17


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Criando um novo Script em C#

Para criar um novo Script em C# (C-Sharp), basta também clicar na


opção + e selecionar C# Script.

Tito Petri © 2022 - Todos os Direitos Reservados. 18


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Novo Arquivo de extensão .cs (C#) criado no diretório do projeto

Após criar o Script, você deve arrastá-lo para o objeto que irá receber sua
programação para adicionar o Script ao funcionamento da cena.

Tito Petri © 2022 - Todos os Direitos Reservados. 19


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Para editar um Script você pode clicar 2 vezes sobre ele na aba Project,
ou acessar a opção Edit Script dentro do componente na aba Inspector.

Antes de fazer isso, veja o próximo passo para saber “Como Configurar o
Visual Studio como o Editor de Scripts Padrão do Unity”.

Tito Petri © 2022 - Todos os Direitos Reservados. 20


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Configurando o Visual Studio como


Editor
Para usar o Visual Studio como Editor de Scripts, devemos fazer a
seguinte configuração:

Vá em Unity > Preferences

Em External Tools, configure o Visual Studio como editor.

Tito Petri © 2022 - Todos os Direitos Reservados. 21


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Agora sempre que você der 2 Cliques em um Script, ou usar a opção Edit
Script, o Unity abrirá seu projeto para edição no Visual Studio.

Tito Petri © 2022 - Todos os Direitos Reservados. 22


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

O Visual Studio possui vários recursos que irão nos ajudar a entender a
linguagem C# e a criar nossas programações. Por exemplo:
● Colorir a Sintaxe
● Auto-Completar
● Dicas e Avisos sobre erros e sintaxe
● Debug do Código
● Auto-Identação do Código (basta selecionar tudo, copiar e colar)

Evento Comentário e Print


using UnityEngine;

public class MeuScript : MonoBehaviour


{
// Evento executado ao iniciar
void Start()
{
print("Hello World");
Debug.Log("Eu sou o Felpudo");
}

/*
Isto é um
comentário em
Múltiplas
Linhas
*/

// Evento executado várias vezes por segundo

Tito Petri © 2022 - Todos os Direitos Reservados. 23


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Update()
{
print("ABC");
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 24


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Executando um Script

Tito Petri © 2022 - Todos os Direitos Reservados. 25


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Monitorando o Console

Tito Petri © 2022 - Todos os Direitos Reservados. 26


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Monitorando Erros

Tito Petri © 2022 - Todos os Direitos Reservados. 27


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 28


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Declaração de Variáveis
using UnityEngine;

public class Aula_01_Variaveis : MonoBehaviour


{
// Declaração de Variáveis
public string nome = "Tito Petri";
public int idade = 23;
public double distancia = 2.5;
public float altura = 1.75f;
public bool verificado = true;

void Start()
{
print("Hello Unity World!");
print("Meu nome é " + nome);
print("Altura: " + altura + " - Idade: " + idade)
}

void Update()
{
print("Game Loop =)");
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 29


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operadores Aritméticos e Unários


using UnityEngine;

public class Aula_02_OperadoresAritmeticosUnarios : MonoBehaviour


{
void Start()
{
// Operadores Aritméticos
print(10 + 30);
print(30 - 5);
print(10 * 30);
print(10 / 3.0f);

// Módulo
print(10 % 3);
print(5 % 2);

// Operadores Unarios
var numero = 10;
numero = numero + 10;
numero += 5;
numero %= 3;
print(numero);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 30


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Funções Matemáticas
using UnityEngine;

public class Aula_03_FuncoesMatematicas : MonoBehaviour


{
void Start()
{
print(Mathf.PI);

print(Mathf.Sin(90));
print(Mathf.Cos(90));
print(Mathf.Tan(90));

print(Mathf.Pow(10,3));
print(Mathf.Sqrt(100));

var meuAngulo = 180;


var meuRadianos = 6.28f;

print(meuAngulo * Mathf.Deg2Rad);
print(meuRadianos * Mathf.Rad2Deg);

print(Mathf.Round(3.5f));
print(Mathf.Round(3.5f));
print(Mathf.Ceil(3.5f));
print(Mathf.Floor(3.5f));
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 31


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Números Aleatórios - Random


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_09_NumerosAleatorios : MonoBehaviour


{
void Start()
{
print(Random.Range(0.0f, 1.0f));

// Sobrecarga +1 (exibirá os numeros de 0 a 4)


print(Random.Range(0, 5));
}

// Update is called once per frame


void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 32


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operações com Strings


using UnityEngine;

public class Aula_04_OperacaoStrings : MonoBehaviour


{
void Start()
{
string nome = "Felpudinho Júnior";
print(nome.Length);
print(nome.ToUpper());
print(nome.ToLower());

string meuNome = nome.Replace("Júnior", "da Silva");


print(meuNome);

print("Programação em C#");
print("\tProgramação em C#");

print("\nProgramação \nem \nC#\n");

print("\"Programação em C#\"");
print("\'Programação em C#\'");
print("\\Programação em C#");
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 33


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operadores Lógicos
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_05_OperadoresLogicos : MonoBehaviour


{
void Start()
{
// Booleanas
bool valorA = false;
bool valorB = true;

print(valorA);

// Operadores Lógicos
print(!true);
print(true && false);
print(true || false);

print(!valorA);
print(valorA && valorB);
print(valorA || valorB);
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 34


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operadores de Comparação
using UnityEngine;
using System.Collections;

public class Aula_06_OperadoresComparacao : MonoBehaviour


{

void Start()
{
// Igual e Diferente
print(10 == 10);
print("Felpudo" != "Felpudo Jr.");

// Maior e Menor
print(10 > 5);
print(10 < 5);

// Maior ou Igual - Menor ou Igual


print(10 >= 5);
print(10 <= 10);
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 35


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Condição If Else
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_07_CondicaoIfElse : MonoBehaviour


{
void Start()
{
int idade = 12;

if (idade < 18)


{
print("Não pode dirigir");
} else if(idade >= 60){
print("Deve renovar a carta");
} else {
print("Pode dirigir");
}
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 36


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_08_EstruturaSwitch : MonoBehaviour


{
void Start()
{
string nome = "Tito";

switch (nome)
{
case "Tito": print("Eu sou o Tito Petri"); break;
case "Felpudo": print("Este é o Felpudo"); break;
case "Fofura": print("Olá, eu sou a Fofura!"); break;
default: print("Nenhum usuário encontrado."); break;
}
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 37


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 38


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo do Par ou Ímpar


using UnityEngine;

public class Aula_10_ParOuImpar : MonoBehaviour


{
void Start()
{
int jogadaA = Random.Range(0, 4);
int jogadaB = Random.Range(0, 4);

print("Jogador A - PAR - " + jogadaA);


print("Jogador B - ÍMPAR - " + jogadaB);

if (((jogadaA + jogadaB) % 2) == 0)
{
print("Jogador A Venceu!");
}
else
{
print("Jogador B Venceu!");
}
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 39


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo do JoKenPô
using UnityEngine;

public class Aula_11_Jokempo : MonoBehaviour


{
void Start()
{
// 0-pedra 1-papel 2-tesoura
int jogadaA = Random.Range(0, 3);
int jogadaB = Random.Range(0, 3);

switch (jogadaA)
{
case 0: print("A. Pedra"); break;
case 1: print("A. Papel"); break;
case 2: print("A. Tesoura"); break;
default: break;
}
switch (jogadaB)
{
case 0: print("B. Pedra"); break;
case 1: print("B. Papel"); break;
case 2: print("B. Tesoura"); break;
default: break;
}

if (jogadaA == jogadaB)
{
print("Empate");
}
else if (((jogadaA == 0) && (jogadaB == 2)) ||
((jogadaA == 1) && (jogadaB == 0)) ||
((jogadaA == 2) && (jogadaB == 1)))
{
print("Jogador A Venceu!");
}
else if (((jogadaB == 0) && (jogadaA == 2)) ||

Tito Petri © 2022 - Todos os Direitos Reservados. 40


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

((jogadaB == 1) && (jogadaA == 0)) ||


((jogadaB == 2) && (jogadaA == 1)))
{
print("Jogador B Venceu!");
}
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 41


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Listas ou Arrays
using UnityEngine;

public class Aula_12_ListasArrays : MonoBehaviour


{
void Start()
{
int[] numeros = { 10, 20, 30, 40, 50 };
string[] nomes = { "Tito", "Felpudo", "Fofura", "Bugado" };
bool[] verificados = { true, true, false, true, false };

string[] meusNomes = new string[6];

int[] meusNumeros = new int[15];


meusNumeros = new int[] { 1, 3, 5, 7, 9 };

int[] meuArray;
meuArray = new int[] { 1, 3, 5, 7, 9 };

print(nomes);
print(numeros[0]);
print(nomes[0].Length);
print(verificados[0]);
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 42


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

ArrayLists
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_13_ArrayList : MonoBehaviour


{
void Start()
{
// ArrayList nomes = new ArrayList();
// nomes = new ArrayList(new[] { "Tito Petri", "Felpudo", "Fofura", "Lesmo", "Bugado", "Uruca"
});

ArrayList nomes = new ArrayList();


nomes.Add("Tito");
nomes.Add("Felpudo");
nomes.Add("Fofura");
nomes.Add("Lesmo");
nomes.Add("Bugado");
nomes.Add("Uruca");

print(nomes[2]);
print(nomes.Count);
print(nomes);

nomes.Remove("Tito");
nomes.Insert(4, "Tito Petri");
nomes.RemoveAt(1);
nomes.RemoveRange(0, 2);
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 43


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 44


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Loop de Repetição For


using UnityEngine;

public class Aula_14_LoopFor : MonoBehaviour


{
void Start()
{
for (int i = 0; i < 10; i++)
{
print(i);
}

print(".....");

for (int i = 20; i >= 10; i-=2)


{
print(i);
}

string[] nomes = { "Felpudo", "Fofura", "Lesmo", "Bugado" };

for (int i = 0; i < nomes.Length; i++)


{
print("Nome: " + nomes[i]);
}

foreach (string nome in nomes)


{
print("Usuário: " + nome);
}

void Update()
{

Tito Petri © 2022 - Todos os Direitos Reservados. 45


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 46


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Matriz Multidimensional
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Aula_15_MatrizMultidimensional : MonoBehaviour


{
void Start()
{
string[,] matrizNomes = new string[3, 4] { {"Felpudo", "Fofura", "Lesmo", "Bugado"},
{"São Paulo", "Patópolis", "Salvador", "Neverland"},
{"ABCD", "EFGH", "IJKL", "MNOP"}};
for (int i = 1; i <= 5; i++)
{
for (int j = 1; j <= 5; j++)
{
print(""+i+j);
}
}

print(matrizNomes.GetLength(0));
print(matrizNomes.GetLength(1));

for (int i = 0; i <= matrizNomes.GetLength(0) - 1; i++)


{
for (int j = 0; j <= matrizNomes.GetLength(1) - 1; j++)
{
print(matrizNomes[i, j]);
}
}
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 47


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 48


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Sorteio de Nomes
using UnityEngine;

public class Aula_16_SorteioNomes : MonoBehaviour


{
void Start()
{
string[] nomes = { "Felpudo", "Fofura", "Lesmo", "Bugado", "Uruca", "Peluche"};
int meuRandom = Random.Range(0, nomes.Length);
print("Ganhador: " + nomes[meuRandom]);
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 49


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Buscar Nome na Lista


using System.Collections;
using UnityEngine;

public class Aula_17_BuscarNome : MonoBehaviour


{
public string nomePesquisado = "Felpudo";

void Start()
{
ArrayList nomes = new ArrayList();
ArrayList IDs = new ArrayList();

nomes = new ArrayList(new[] { "Tito Petri", "Felpudo", "Fofura", "Lesmo", "Bugado", "Uruca" });
IDs = new ArrayList(new[] { 12, 10, 33, 13, 100, 5 });

bool encontrado = false;


for (int i = 0; i < nomes.Count; i++)
{
if (nomes[i].Equals(nomePesquisado))
{
encontrado = true;
print("Nome Encontrado" + nomes[i] + IDs[i]);
break;
}
}
if (!encontrado) { print("Nome Não Encontrado!"); }
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 50


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Métodos Funções e Procedimentos


using UnityEngine;

public class Aula_18_MetodosFuncoesProcedimentos : MonoBehaviour


{
void Start()
{
falar();
andar(12);
print(multiplicar(50, 10));
}

void falar()
{
print("Olá! Eu sou o Felpudo!");
}

void andar(int distancia)


{
print("Andou " + distancia + " metros.");
}

int multiplicar(int a, int b)


{
return a * b;
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 51


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Modificadores de Acesso
using UnityEngine;

public class Aula_19_ModificadoresAcesso : MonoBehaviour


{
public Animal animal;

void Start()
{
animal = new Animal("Felpudo", "Brasil", 12, true);
animal.andar(4.5f);
print(animal.falar());
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 52


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Declaração de Classe
using UnityEngine;
using System.Collections;

public class Animal


{
string nome;
string pais;
int idade;
bool vertebrado;
float distancia = 5.5f;

public Animal(string nome, string pais, int idade, bool vertebrado)


{
this.nome = nome;
this.pais = pais;
this.idade = idade;
this.vertebrado = vertebrado;
}

public void andar(float distancia)


{
Debug.Log(distancia);
}

public string falar()


{
return "Olá eu sou o Felpudo!";
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 53


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Inputs de Mouse e Teclado


using UnityEngine;

public class Exemplo01_Inputs : MonoBehaviour


{

void Start()
{

void Update()
{
if (Input.GetKey(KeyCode.Space))
{
print("Espaço");
}

if (Input.GetKeyDown(KeyCode.Space))
{
print("Apertou Espaço");
}

if (Input.GetKeyUp(KeyCode.Space))
{
print("Soltou Espaço");
}

if (Input.GetKeyDown("up"))
{
print("Seta Cima");
}

private void OnMouseDown()


{

Tito Petri © 2022 - Todos os Direitos Reservados. 54


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Debug.Log("Clicou no Objeto");
}

private void OnMouseEnter()


{
Debug.Log("Entrou");
}

private void OnMouseExit()


{
Debug.Log("Saiu");
}
}

Acessando Propriedades
using UnityEngine;

public class Exemplo02_Propriedades : MonoBehaviour


{

void Start()
{
print(this.name);
print(this.transform);
print(this.transform.position);
print(this.transform.rotation.z);
print(this.tag);
}

void Update()
{
if (Input.GetKey("space")) {
this.gameObject.SetActive(false);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 55


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 56


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Game Object e Set Active


using UnityEngine;

public class Exemplo03_HideToggle : MonoBehaviour


{
//public GameObject meuObjeto;
GameObject meuObjeto;
private bool estado;

void Start()
{
//meuObjeto = GameObject.Find("Cube");
meuObjeto = GameObject.FindWithTag("Player");
}

void Update()
{
if (Input.GetKeyDown("up")) {
estado = !estado;
meuObjeto.SetActive(estado);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 57


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Acessando Componentes
using UnityEngine;

public class Exemplo04_Componentes : MonoBehaviour


{
BoxCollider boxCollider;
new Renderer renderer;

void Start()
{
boxCollider = GetComponent<BoxCollider>();
boxCollider.isTrigger = true;

renderer = GetComponent<Renderer>();
renderer.material.color = Color.red;
}

void Update()
{

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 58


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Acessando Materiais
using UnityEngine;

public class Exemplo05_MudarMateriais : MonoBehaviour


{
public Color color;
new Renderer renderer;

void Start()
{
renderer = GetComponent<Renderer>();

void Update()
{

}
private void OnMouseEnter()
{
renderer.material.color = color;
}

private void OnMouseExit()


{
renderer.material.color = Color.black;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 59


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo da Velha - TicTacToe

using UnityEngine;

public class BoxClica : MonoBehaviour


{
public int indice;
GameObject tabuleiro;

void Start()
{
tabuleiro = GameObject.Find("TABULEIRO");

void Update()

Tito Petri © 2022 - Todos os Direitos Reservados. 60


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

private void OnMouseDown()


{
tabuleiro.GetComponent<TicTacToeEngine>().jogou(indice,
this.gameObject.transform.position);
Destroy(this.gameObject);
}
}

using UnityEngine;

public class TicTacToeEngine : MonoBehaviour


{

public GameObject xis;


public GameObject bolinha;

int rodada = 1;
int[] jogadas = { 0, 0, 0,
0, 0, 0,
0, 0, 0};

void Start()
{

void Update()
{

public void jogou(int indiceClicado, Vector3 posicao) {

//print("Clicou no Box:" + indiceClicado);

if (rodada % 2 != 0)

Tito Petri © 2022 - Todos os Direitos Reservados. 61


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
Instantiate(xis, posicao, Quaternion.identity);
jogadas[indiceClicado] = 1; // 1 = XIS
}
else {
Instantiate(bolinha, posicao, Quaternion.identity);
jogadas[indiceClicado] = 2; // 2 = BOLINHA
}

rodada++;
verificaJogada();
}

void verificaJogada() {

//for (int i = 0; i < jogadas.Length; i++) {


// print(jogadas[i]);
//}

// verificacao na horizontal
if ((jogadas[0] == 1 && jogadas[1] == 1 && jogadas[2] == 1) ||
(jogadas[3] == 1 && jogadas[4] == 1 && jogadas[5] == 1) ||
(jogadas[6] == 1 && jogadas[7] == 1 && jogadas[8] == 1) ||

//verificacao na vertical
(jogadas[0] == 1 && jogadas[3] == 1 && jogadas[6] == 1) ||
(jogadas[1] == 1 && jogadas[4] == 1 && jogadas[7] == 1) ||
(jogadas[2] == 1 && jogadas[5] == 1 && jogadas[8] == 1) ||

// verificacao na diagonal
(jogadas[0] == 1 && jogadas[4] == 1 && jogadas[8] == 1) ||
(jogadas[2] == 1 && jogadas[4] == 1 && jogadas[6] == 1))
{
print("Jogador XIS Ganhou!");
}
else if ((jogadas[0] == 2 && jogadas[1] == 2 && jogadas[2] == 2) ||
(jogadas[3] == 2 && jogadas[4] == 2 && jogadas[5] == 2) ||
(jogadas[6] == 2 && jogadas[7] == 2 && jogadas[8] == 2) ||

//verificacao na vertical
(jogadas[0] == 2 && jogadas[3] == 2 && jogadas[6] == 2) ||

Tito Petri © 2022 - Todos os Direitos Reservados. 62


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

(jogadas[1] == 2 && jogadas[4] == 2 && jogadas[7] == 2) ||


(jogadas[2] == 2 && jogadas[5] == 2 && jogadas[8] == 2) ||

// verificacao na diagonal
(jogadas[0] == 2 && jogadas[4] == 2 && jogadas[8] == 2) ||
(jogadas[2] == 2 && jogadas[4] == 2 && jogadas[6] == 2))
{
print("Jogador BOLINHA Ganhou!");
}
else {

if (rodada == 10) {
print("Deu Velha!");
}
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 63


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Movimentação Lateral
using UnityEngine;

public class MeuScript : MonoBehaviour


{

float px = 0.0f;
public float velocidade = 0.1f;
public float aceleracao = 0.95f;

void Start()
{

void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
px += velocidade * Time.deltaTime;
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
px -= velocidade * Time.deltaTime;
}
else
{
px *= aceleracao;
}

transform.position += new Vector3(px, 0, 0);

float posicaoX = transform.position.x;

if (transform.position.x > 3.0f)


{
px = 0;

Tito Petri © 2022 - Todos os Direitos Reservados. 64


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

posicaoX = 3.0f;
}
else if (transform.position.x < -3.0f)
{
px = 0;
posicaoX = -3.0f;
}
transform.position = new Vector3(posicaoX, 0.5f, 0);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 65


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Movimentação 3D do Jogador
using UnityEngine;

public class Exemplo07_MovimentoPlayer : MonoBehaviour


{
float velocidade = 5.0f;
float giro = 90.0f;

Vector3 inicio;

void Start()
{
inicio = transform.position;
}

void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, giro * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up, -giro * Time.deltaTime);
}

if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * velocidade * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(-Vector3.forward * velocidade * Time.deltaTime);
}

if (Input.GetKey(KeyCode.Space))

Tito Petri © 2022 - Todos os Direitos Reservados. 66


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
transform.position = inicio;
}

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 67


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Hierarquia de Cena

Por enquanto vamos apenas desenvolver um protótipo do personagem,


utilizando primitivas Cube e Spheres do Unity.

Lembre-se que para criar uma Hierarquia, basta arrastar um node para
dentro do outro, na aba Hierarchy, do filho para o pai.

Tito Petri © 2022 - Todos os Direitos Reservados. 68


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Esta é a hierarquia que criamos para o nosso personagem. Agora todos


os objetos ficam ligados à um único pai. É este node que deve receber o
Script de Movimentação.

Tito Petri © 2022 - Todos os Direitos Reservados. 69


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Camera LookAt
using UnityEngine;

public class Exemplo08_CameraLookAt : MonoBehaviour


{
public GameObject jogador;

void Start()
{
jogador = GameObject.FindWithTag("Player");
}

void Update()
{
transform.LookAt(jogador.transform);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 70


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Camera Follow
using UnityEngine;

public class Exemplo09_CameraFollow : MonoBehaviour


{
GameObject jogador;
private Vector3 posicaoInicial;

void Start()
{
jogador = GameObject.FindWithTag("Player");
posicaoInicial = transform.position -
jogador.transform.position;
}

void LateUpdate()
{
transform.position = jogador.transform.position +
posicaoInicial;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 71


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Girar Item
using UnityEngine;

public class Exemplo10_GiraMoeda : MonoBehaviour


{
public int atraso;

void Start()
{
transform.Rotate(0.0f, 15.0f * atraso, 0.0f, Space.World);
}

void Update()
{
transform.Rotate(0.0f, 3.0f, 0.0f, Space.World);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 72


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Meu Primeiro Game Completo


using UnityEngine;
using UnityEngine.UI;

public class Exemplo07_MovimentoPlayer : MonoBehaviour


{
public float velocidade = 5.0f;
public float giro = 90.0f;
public int quantidadeItens = 10;
public GameObject moeda;

public Text textoPontos;


public Text textoFinal;

private int pontos;


private AudioSource somMoeda;
private Vector3 inicio;

void Start()
{
somMoeda = GetComponent<AudioSource>();
inicio = transform.position;
//textoPontos.text = "Moedas: " + pontos.ToString();
textoPontos.text = "Moedas: " + quantidadeItens.ToString();
textoFinal.gameObject.SetActive(false);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 73


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Awake() {
for (int i = 0; i < quantidadeItens; i++)
{
criarMoedaAleatoriamente();
}
}

void criarMoedaAleatoriamente()
{
float px = Random.Range(-10.0f, 10.0f);
float pz = Random.Range(-10.0f, 10.0f);

Vector3 posicao = new Vector3(px,0,pz);


Instantiate(moeda, posicao, Quaternion.identity);
}
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, giro * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up, -giro * Time.deltaTime);
}

if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * velocidade *
Time.deltaTime);

Tito Petri © 2022 - Todos os Direitos Reservados. 74


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
else if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(-Vector3.forward * velocidade *
Time.deltaTime);
}

if (Input.GetKey(KeyCode.Space))
{
transform.position = inicio;
}

void OnTriggerEnter(Collider outro)


{
if (outro.gameObject.CompareTag("Moeda"))
{
somMoeda.Play(0);
Destroy(outro.gameObject);
marcaPonto();
}
}

void marcaPonto()
{
pontos++;
//textoPontos.text = "Moedas: " + pontos.ToString();
textoPontos.text = "Itens: " + (quantidadeItens-pontos).ToString();
if (pontos == quantidadeItens)

Tito Petri © 2022 - Todos os Direitos Reservados. 75


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
textoFinal.gameObject.SetActive(true);
textoFinal.text = "Você Venceu!";
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 76


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Múltiplas Câmeras
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameEngine : MonoBehaviour {

public GameObject[] cameras;


private int indiceCamera = 0;
// Use this for initialization
void Start () {
CameraFoco(indiceCamera);
}

// Update is called once per frame


void Update () {

if(Input.GetMouseButtonDown(0)){
MudaCamera(1);
}

if(Input.GetMouseButtonDown(1)){
MudaCamera(-1);
}

void CameraFoco (int indice){


for(int i = 0; i < cameras.Length; i++){
cameras[i].SetActive(i == indice);

Tito Petri © 2022 - Todos os Direitos Reservados. 77


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
}

void MudaCamera(int incremento){


indiceCamera += incremento;

if(indiceCamera >= cameras.Length){


indiceCamera = 0;
}

if(indiceCamera < 0){


indiceCamera = cameras.Length-1;
}
Debug.Log(indiceCamera);
CameraFoco(indiceCamera);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 78


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Criando uma Nova Cena


Agora devemos criar um novo arquivo de cena do unity (extensão .scene)
para montar o Menu Inicial do Jogo.

Crie uma nova cena, e clique 2x sobre ela para editá-la.

Esta nova cena deve conter apenas 1 Câmera com o Script adiante
aplicado à ela.
Lembre-se também de carregar os gráficos que irá utilizar nesta etapa.

Tito Petri © 2022 - Todos os Direitos Reservados. 79


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Interface Menu Inicial - GUI


using UnityEngine.SceneManagement;
using UnityEngine;

public class Exemplo12_InterfaceUI : MonoBehaviour


{
public Texture minhaImagem;
public Texture btnTexture;

void Start()
{

void Update()
{

void OnGUI()
{
if (!minhaImagem)
{
Debug.LogError("Carregue uma Imagem no Inspetor.");
return;
}

GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height),


minhaImagem, ScaleMode.ScaleToFit);

Tito Petri © 2022 - Todos os Direitos Reservados. 80


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (!btnTexture)
{
Debug.LogError("Carregue uma Imagem no Inspetor.");
return;
}

if (GUI.Button(new Rect(Screen.width/2-60, Screen.height-60, 120, 40),


"INICIAR"))
{
clicouBotao();
}

GUI.backgroundColor = Color.clear;

if (GUI.Button(new Rect(Screen.width - btnTexture.width/2 - 20 , 20,


btnTexture.width/2, btnTexture.height/2), btnTexture))
{
clicouBotao();
}

void clicouBotao()
{
SceneManager.LoadScene("Fase_01");
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 81


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Array de Moedas - Linha


using UnityEngine;

public class ArrayMoedasFila : MonoBehaviour


{
public GameObject item;
public int quantidade = 5;
public float distancia = 1.0f;

private float offsetX = 0.0f;

void Start()
{
offsetX = ((quantidade*distancia)/2.0f);
print(offsetX);
for (int i = 0; i < quantidade; i++)
{
item.gameObject.GetComponent<GiraMoeda>().offset = i;
Vector3 posicao = new Vector3(i-offsetX+(distancia/2.0f), 0, 0) +
transform.position;
Instantiate(item, posicao, Quaternion.identity);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 82


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Array de Moedas - Random


using UnityEngine;

public class ArrayMoedasRandom : MonoBehaviour


{
public GameObject item;
public int quantidade = 50;
public float area = 10;

void Awake()
{
for (int i = 0; i < quantidade; i++)
{
criarMoedaAleatoriamente(i);
}
}

void criarMoedaAleatoriamente(int contador)


{
float px = Random.Range(-area/2.0f, area / 2.0f);
float pz = Random.Range(-area / 2.0f, area / 2.0f);

Vector3 posicao = new Vector3(px, 0, pz) + transform.position;


Instantiate(item, posicao, Quaternion.identity);
item.gameObject.GetComponent<GiraMoeda>().offset = contador;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 83


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Array de Moedas - Ring


using UnityEngine;

public class ArrayMoedasRing : MonoBehaviour


{
public GameObject item;
public int qtd;
public float raio;

void Awake()
{
for (int i = 1; i <= qtd; i++)
{
float contador = Mathf.PI * 2 / qtd * i;
float px = Mathf.Sin(contador) * raio;
float pz = Mathf.Cos(contador) * raio;

Vector3 posicao = new Vector3(px, 0, pz) + transform.position;


Instantiate(item, posicao, Quaternion.identity);
item.gameObject.GetComponent<GiraMoeda>().offset = i;
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 84


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Array de Moedas - Grade 2D


using UnityEngine;

public class ArrayMoedasGrid : MonoBehaviour


{
public GameObject item;
public float distancia;
public int quantidade;
public int colunas;

void Awake()
{
float offsetx = colunas * distancia / 2 - distancia/2;
float linhas = Mathf.Ceil(quantidade / (float)colunas);
float offsetz = linhas * distancia / 2 - distancia / 2;

for (int i = 0; i < quantidade; i++)


{
Vector3 posicao = new Vector3(i % colunas * distancia, 0, Mathf.Floor(i
/ colunas) * distancia)
+ transform.position
+ new Vector3(-offsetx, 0 , -offsetz);
item.gameObject.GetComponent<GiraMoeda>().offset = i;
Instantiate(item, posicao, Quaternion.identity);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 85


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Inimigo - Movimento Circular


using UnityEngine;

public class InimigoMovimentoCircular : MonoBehaviour


{

public float velocidade = 1.5f;


public float raio = 3.0f;

Vector3 posicaoInicial;
float tempo = 0;

void Start()
{
transform.Rotate(0, 0, 0, Space.World);
posicaoInicial = transform.position;
}

void Update()
{
tempo += Time.deltaTime * velocidade;
float px = Mathf.Sin(tempo) * raio;
float pz = Mathf.Cos(tempo) * raio;

transform.position = new Vector3(px, 0, pz) + posicaoInicial;


transform.LookAt(posicaoInicial);
transform.Rotate(0, 90, 0, Space.Self);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 86


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Inimigo - Movimento Bounce


using UnityEngine;

public class MovimentacaoInimigoBounce : MonoBehaviour


{
public float V = 1.0f;
public float D = 3.0f;
float MX = 1.0f;
bool GO = true;
bool GIRA = false;

void Start()
{
}

void Update()
{
if (!GIRA)
{
transform.Translate(Vector3.forward * MX * V * Time.deltaTime);

if (transform.localPosition.z >= D && GO)


{
//GO = false;
//MX = -MX;
GIRA = true;
}
if (transform.localPosition.z <= -D && !GO)
{
//GO = true;
//MX = -MX;

Tito Petri © 2022 - Todos os Direitos Reservados. 87


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GIRA = true;
}
}
else
{
gira();
}
}

void gira()
{
transform.Rotate(0, 150.0f * Time.deltaTime, 0, Space.Self);
if (transform.localEulerAngles.y >= 180.0f && GO)
{
GIRA = false;
GO = false;
//MX = -MX;
}

if (transform.localEulerAngles.y <= 180.0f && !GO)


{
GIRA = false;
GO = true;
//MX = -MX;
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 88


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Inimigo - Movimento Follow


using UnityEngine;

public class MovimentacaoInimigoFollow : MonoBehaviour


{
GameObject jogador;
GameObject vazio;
bool aproximou;

void Start()
{
jogador = GameObject.Find("Felpudo");
vazio = new GameObject();
}

void Update()
{
float distancia = Vector3.Distance(jogador.transform.position,
transform.position);
if (distancia < 5.0f)
{
vazio.transform.LookAt(jogador.transform);
aproximou = true;
print("Aproximou!");
}
else {
aproximou = false;
}

if (aproximou) {
transform.Translate(Vector3.forward * Time.deltaTime * 3.0f);

Tito Petri © 2022 - Todos os Direitos Reservados. 89


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

transform.LookAt(jogador.transform);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 90


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Colidir com Inimigo


void OnTriggerEnter(Collider outro)
{
if (outro.gameObject.CompareTag("Inimigo"))
{
tomouPancada();
}
}

void tomouPancada() {
vidas--;
if (vidas <= 0)
{
textoFimDeJogo.text = "You Lose";
textoFimDeJogo.gameObject.SetActive(true);
acabou = true;
}
piscaOn();
}

Tito Petri © 2022 - Todos os Direitos Reservados. 91


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Efeito de Dano e Impulso


void tomouPancada() {

...

rb.AddForce(-transform.forward * hit);
piscaOn();
}

void piscaOn() {
if (contaPisca < 6) {
contaPisca += 1;
renderer.material.color = Color.red;
Invoke("piscaOff", 0.1f);
}
}
void piscaOff() {
renderer.material.color = corOriginal;
if (contaPisca == 5)
{
contaPisca = 0;
}
else {
Invoke("piscaOn", 0.1f);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 92


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Pulo e Estados do Pulo


if (Input.GetKeyDown(KeyCode.Space) && noChao)
{
noChao = false;
rigidbody.AddForce(transform.up * 300.0f);
//transform.position = inicio;
Invoke("zeraPulo", 1.0f);
}

void zeraPulo()
{
noChao = true;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 93


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Pisca Material - Single


new Renderer renderer;
Color corOriginal;

GameObject corpoFelpudo = GameObject.FindWithTag("Corpo");


renderer = corpoFelpudo.GetComponent<Renderer>();
corOriginal = renderer.material.color;

renderer.material.color = Color.red;

renderer.material.color = corOriginal;

Tito Petri © 2022 - Todos os Direitos Reservados. 94


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Pisca Múltiplos Materiais


GameObject[] objetosCorpoFelpudo;

objetosCorpoFelpudo = GameObject.FindGameObjectsWithTag("Corpo");

foreach (GameObject meuItem in objetosCorpoFelpudo)


{
meuItem.GetComponent<Renderer>().material.color = Color.red;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 95


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

AudioSource e AudioClip - Sons e


Música
private AudioSource audioSource;
public AudioClip somMoeda;
public AudioClip somPorrada;
public AudioClip somOvinho;

audioSource = GetComponent<AudioSource>();

audioSource.clip = somOvinho;
audioSource.Play();

Tito Petri © 2022 - Todos os Direitos Reservados. 96


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Evento GameOver
void tomouPancada() {
vidas--;
audioSource.clip = somPancada;
audioSource.Play();
if (vidas <= 0)
{
textoFimDeJogo.text = "You Lose";
textoFimDeJogo.gameObject.SetActive(true);
acabou = true;
}
rb.AddForce(-transform.forward * hit);
piscaOn();
}

Tito Petri © 2022 - Todos os Direitos Reservados. 97


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Ação de Atirar
public GameObject desentupidor;

if (Input.GetKeyDown(KeyCode.LeftShift))
{
audioSource.clip = somOvinho;
audioSource.Play();

GameObject bullet = Instantiate(desentupidor, transform.position + new


Vector3(0,0.5f,0), transform.rotation) as GameObject;
bullet.GetComponent<Rigidbody>().AddForce(transform.forward * 1000);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 98


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Script do Projétil e Partículas


using UnityEngine;

public class ScriptDesentupidor : MonoBehaviour


{
public AudioClip somOvo;
public GameObject particula;

void OnTriggerEnter(Collider outro)


{
if (outro.gameObject.CompareTag("Inimigo"))
{
GameObject jogador = GameObject.FindWithTag("Player");
jogador.GetComponent<AudioSource>().clip = somOvo;
jogador.GetComponent<AudioSource>().Play();
Instantiate(particula, outro.transform.position, outro.transform.rotation);
Destroy(outro.gameObject);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 99


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Script MovePlayer - Game Felpudo


Adventure Versão 1.0
Amostra do Script completo da movimentação do personagem com os
últimos recursos implementados na versão 1.0.

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;

public class MeuScript : MonoBehaviour


{
public Text textoPontos;
public Text textoFimDeJogo;
public Text textoVidas;
public Image lifeBar;
public Sprite[] imagensLifeBar;

private AudioSource audioSource;


public AudioClip somMoeda;
public AudioClip somPorrada;
public AudioClip somOvinho;

float velocidade = 6.5f;


float giro = 300.0f;
Vector3 inicio;

int pontos = 0;
int quantidadeDeMoedas = 0;
int energia = 8;
int vidas = 3;

Tito Petri © 2022 - Todos os Direitos Reservados. 100


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

bool acabou = false;


bool venceu = false;
int contaPisca = 5;
Color corOriginal;
bool noChao = true;

new Rigidbody rigidbody;


new Renderer renderer;

GameObject[] objetosCorpoFelpudo;
public GameObject desentupidor;
public GameObject particulaMoeda;
public GameObject particulaOvo;

void Start()
{
audioSource = GetComponent<AudioSource>();
rigidbody = GetComponent<Rigidbody>();

GameObject corpoFelpudo = GameObject.FindWithTag("Corpo");


renderer = corpoFelpudo.GetComponent<Renderer>();
corOriginal = renderer.material.color;

objetosCorpoFelpudo = GameObject.FindGameObjectsWithTag("Corpo");

inicio = transform.position;
lifeBar.GetComponent<Image>().sprite = imagensLifeBar[energia];

var objects = GameObject.FindGameObjectsWithTag("Moeda");


quantidadeDeMoedas = objects.Length;
textoPontos.text = "" + pontos + "/" + quantidadeDeMoedas;
textoVidas.text = "x " + vidas;
textoFimDeJogo.gameObject.SetActive(false);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 101


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Update()
{
if (!acabou)
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.Rotate(Vector3.up, giro * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up, -giro * Time.deltaTime);
}

if (Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector3.forward * velocidade * Time.deltaTime);
}
else if (Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(-Vector3.forward * velocidade * Time.deltaTime);
}

if (Input.GetKeyDown(KeyCode.Space) && noChao)


{
noChao = false;
rigidbody.AddForce(transform.up * 300.0f);
//transform.position = inicio;
Invoke("zeraPulo", 1.0f);
}

if (Input.GetKeyDown(KeyCode.LeftShift))
{
audioSource.clip = somOvinho;

Tito Petri © 2022 - Todos os Direitos Reservados. 102


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

audioSource.Play();

GameObject bullet = Instantiate(desentupidor, transform.position +


new Vector3(0,0.5f,0), transform.rotation) as GameObject;
bullet.GetComponent<Rigidbody>().AddForce(transform.forward *
1000);
}

}
else
{
print("Clicou");
if (Input.GetMouseButtonDown(0))
{
if (venceu)
{
SceneManager.LoadScene("Fase01");
}
else
{
SceneManager.LoadScene("Introducao");
}
}

}
}

void zeraPulo()
{
noChao = true;
}

void OnTriggerEnter(Collider outro)


{

Tito Petri © 2022 - Todos os Direitos Reservados. 103


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (outro.gameObject.CompareTag("Moeda"))
{
Instantiate(particulaMoeda , outro.transform.position,
outro.transform.rotation);
Destroy(outro.gameObject);

marcaPonto();
}

if (outro.gameObject.CompareTag("Inimigo"))
{
//Destroy(outro.gameObject.transform.parent.gameObject);
tomouPorrada();
}

if (outro.gameObject.CompareTag("Ovo"))
{
Instantiate(particulaOvo, outro.transform.position,
outro.transform.rotation);
Destroy(outro.gameObject);
ganhouLife();
}
}

void tomouPorrada()
{
energia--;
lifeBar.GetComponent<Image>().sprite = imagensLifeBar[energia];
rigidbody.AddForce(transform.forward * -700.0f);

audioSource.clip = somPorrada;
audioSource.Play();

Tito Petri © 2022 - Todos os Direitos Reservados. 104


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (energia <= 0)
{
textoFimDeJogo.text = "Você Perdeu";
textoFimDeJogo.gameObject.SetActive(true);
acabou = true;
venceu = false;
}

piscaOn();
}

void ganhouLife() {

audioSource.clip = somOvinho;
audioSource.Play();

if (!(energia >= 8)) {


energia++;
lifeBar.GetComponent<Image>().sprite = imagensLifeBar[energia];
}
}

void piscaOn()
{
if (contaPisca > 0)
{
contaPisca--;

//renderer.material.color = Color.red;

foreach (GameObject meuItem in objetosCorpoFelpudo)


{
meuItem.GetComponent<Renderer>().material.color = Color.red;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 105


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Invoke("piscaOff", 0.1f);
}
}
void piscaOff()
{

//renderer.material.color = corOriginal;

foreach (GameObject meuItem in objetosCorpoFelpudo)


{
meuItem.GetComponent<Renderer>().material.color = corOriginal;
}

if (contaPisca <= 0)
{
contaPisca = 5;
}
else
{
Invoke("piscaOn", 0.1f);
}
}

void marcaPonto()
{
pontos++;
audioSource.clip = somMoeda;
audioSource.Play();
textoPontos.text = "" + pontos + "/" + quantidadeDeMoedas;

if (pontos == quantidadeDeMoedas)
{
textoFimDeJogo.text = "Você Venceu!";

Tito Petri © 2022 - Todos os Direitos Reservados. 106


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

textoFimDeJogo.gameObject.SetActive(true);
acabou = true;
venceu = true;
}

private void OnMouseDown()


{
print("Clicou");
if (acabou)
{
if (venceu)
{
SceneManager.LoadScene("Fase01");
} else
{
SceneManager.LoadScene("Introducao");
}
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 107


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Porta Abre e Fecha - FBX com


Animação
using UnityEngine;

public class PortaAbreFechaFBX : MonoBehaviour


{
Animation anim;

void Start()
{
anim = GetComponent<Animation>();
}

void OnTriggerEnter(Collider outro)


{
if (outro.gameObject.CompareTag("Player"))
{
anim.Blend("Abre", 0.25f);
//anim.Play("Abre");
}
}

void OnTriggerExit(Collider outro)


{
if (outro.gameObject.CompareTag("Player"))
{
anim.Blend("Fecha", 0.25f);
//anim.Play("Fecha");
}

Tito Petri © 2022 - Todos os Direitos Reservados. 108


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
}

Porta Abre e Fecha - Animator


using UnityEngine;

public class PortaAbreFechaAnimator : MonoBehaviour


{
Animator meuAnimator;
GameObject porta;
void Start()
{
//porta = GameObject.Find("Porta");
//meuAnimator = porta.GetComponent<Animator>();

foreach (Transform meuObjeto in transform)


{
if (meuObjeto.name == "Porta")
{
porta = meuObjeto.gameObject;
meuAnimator = porta.GetComponent<Animator>();
}
}

void OnTriggerEnter(Collider outro)


{

Tito Petri © 2022 - Todos os Direitos Reservados. 109


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (outro.gameObject.CompareTag("Player"))
{
meuAnimator.SetBool("Ativo", true);
}
}

void OnTriggerExit(Collider outro)


{
if (outro.gameObject.CompareTag("Player"))
{
meuAnimator.SetBool("Ativo", false);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 110


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Character Controller Básico


using UnityEngine;

public class CharacterControllerBasico : MonoBehaviour


{
CharacterController meuCharacterController;
Vector3 pulo;

void Start()
{
meuCharacterController = GetComponent<CharacterController>();
}

void Update()
{
Vector3 frente = transform.TransformDirection(Vector3.forward) *
Input.GetAxis("Vertical") * 5.0f;
meuCharacterController.Move(frente * Time.deltaTime);
transform.Rotate(new
Vector3(0,Input.GetAxis("Horizontal"),0)*Time.deltaTime*300.0f);

meuCharacterController.SimpleMove(Physics.gravity);

if (Input.GetButton("Jump")) {
if (meuCharacterController.isGrounded) {
pulo.y = 10.0f;
}
}

meuCharacterController.Move(pulo * Time.deltaTime);
pulo.y -= 7.0f * Time.deltaTime;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 111


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Relógio com Minutos e Segundos -


Contagem Regressiva
using UnityEngine;
using UnityEngine.UI;

public class ScriptRelogio : MonoBehaviour


{
public int tempoInicial = 90;
public Text textoTempo;
GameObject jogador;
MeuScript meuScript;
bool acabou = false;

void Start()
{
jogador = GameObject.Find("Felpudo");
meuScript = jogador.GetComponent<MeuScript>();
}

void Update()
{
if (!acabou){

print(Time.time);

int tempo = tempoInicial - (int)(Time.time);

int minutos = (int)(tempo / 60.0f);


int segundos = (int)(tempo % 60.0f);

Tito Petri © 2022 - Todos os Direitos Reservados. 112


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (segundos < 10)


{
textoTempo.text = "" + minutos + ":0" + segundos;
}
else
{
textoTempo.text = "" + minutos + ":" + segundos;
}

if (segundos < 1 && minutos <= 0)


{
print("Fim de Jogo");
acabou = true;
meuScript.fimDeJogo();
}
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 113


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 114


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 115


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Flappy Bird 3D
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class FlappyGameEngine : MonoBehaviour


{
bool comecou;
bool acabou;
int pontos = 0;

public Text textoPontos;


public Text textoGameOver;

GameObject objetoDaVez;

public GameObject cerca;

public GameObject arbusto;


public GameObject pedras;
public GameObject canos;
public GameObject nuvem;
public GameObject ovo;

GameObject jogador;
Rigidbody meuRigidbody;

void Start()
{
Physics.gravity = new Vector3(0, -20.0f, 0);

Tito Petri © 2022 - Todos os Direitos Reservados. 116


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//jogador = GameObject.Find("FELPUDO");
jogador = GameObject.FindWithTag("JOGADOR");
meuRigidbody = jogador.GetComponent<Rigidbody>();
textoGameOver.text = "";
}

void Update()
{
if (Input.GetMouseButtonDown(0) && !acabou)
{
if (!comecou)
{
comecou = true;
meuRigidbody.useGravity = true;
meuRigidbody.velocity = new Vector3(0.0f, 5.0f, 0.0f);
Invoke("criaCerca", 0.5f);
Invoke("criaObjetos", 0.5f);

GameObject.Find("OBJETO_PISO").GetComponent<ScrollingPiso>().iniciarAni
macaoPiso();
}
else
{
//meuRigidbody.AddForce(gameObject.transform.up*500.0f);
meuRigidbody.velocity = Vector3.zero;
meuRigidbody.velocity = new Vector3(0.0f, 5.0f, 0.0f);
}
}
}

private void FixedUpdate()


{
jogador.gameObject.transform.rotation = Quaternion.Euler(0, 0,

Tito Petri © 2022 - Todos os Direitos Reservados. 117


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

meuRigidbody.velocity.y * -3);
}

void criaCerca()
{
Instantiate(cerca);
Invoke("criaCerca", 1.3f);
}

void criaObjetos()
{
//GameObject objetoDaVez = new GameObject();
switch (Random.Range(0, 5))
{
case 0: objetoDaVez = arbusto; break;
case 1: objetoDaVez = pedras; break;
case 2: objetoDaVez = canos; break;
case 3: objetoDaVez = nuvem; break;
case 4: objetoDaVez = ovo; break;
default: break;
}

Instantiate(objetoDaVez, gameObject.transform.position,
transform.rotation);
Invoke("criaObjetos", Random.Range(0.75f, 2.0f));
}

public void marcaPonto(int qtd)


{
pontos += qtd;
//print("Pontos: " + pontos);
textoPontos.text = "" + pontos;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 118


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

public void fimDeJogo()


{
acabou = true;
meuRigidbody.velocity = Vector3.zero;
meuRigidbody.velocity = new Vector3(-10.0f, 10.0f, 0.0f);
Invoke("recarregarCena", 2.0f);
textoGameOver.text = "Game Over";
}

public void recarregarCena() {


SceneManager.LoadScene("MinhaCena");
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 119


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;

public class ControleJogador : MonoBehaviour


{
AudioSource meuAudioSource;

public AudioClip somOvo;


public AudioClip somVao;
public AudioClip somHit;

GameObject meuGameEngine;
FlappyGameEngine meuFlappyGameEngine;

//bool comecou;

//Rigidbody meuRigidbody;

void Start()
{
//Physics.gravity = new Vector3(0, -20.0f, 0);
//meuRigidbody = GetComponent<Rigidbody>();

meuGameEngine = GameObject.Find("FlappyEngine");
meuFlappyGameEngine =
meuGameEngine.GetComponent<FlappyGameEngine>();

meuAudioSource = GetComponent<AudioSource>();
}

//void Update()
//{
// if (Input.GetMouseButtonDown(0)) {

Tito Petri © 2022 - Todos os Direitos Reservados. 120


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

// if (!comecou)
// {
// comecou = true;
// meuRigidbody.useGravity = true;
// }
// else {
// //meuRigidbody.AddForce(gameObject.transform.up*500.0f);
// meuRigidbody.velocity = Vector3.zero;
// meuRigidbody.velocity = new Vector3(0.0f, 10.0f, 0.0f);
// }

// }
//}

//private void FixedUpdate()


//{
// this.gameObject.transform.rotation = Quaternion.Euler(0, 0,
meuRigidbody.velocity.y * -3);
//}

private void OnTriggerEnter(Collider outroObjeto)


{
switch (outroObjeto.gameObject.tag) {
case "ARBUSTO": fimDeJogo(); break;
case "CANOS": fimDeJogo(); break;
case "PEDRAS": fimDeJogo(); break;

Tito Petri © 2022 - Todos os Direitos Reservados. 121


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

case "OVO":
print("Pegou Ovo!");
Destroy(outroObjeto.gameObject);
meuFlappyGameEngine.marcaPonto(1);
meuAudioSource.PlayOneShot(somOvo);
break;
default: break;
}

//Destroy(outroObjeto.gameObject);
}

private void OnTriggerExit(Collider outroObjeto)


{
if (outroObjeto.gameObject.tag == "VAO")
{
meuFlappyGameEngine.marcaPonto(5);
meuAudioSource.PlayOneShot(somVao);
}
}

void fimDeJogo() {
//print("Fim de Jogo!");
meuFlappyGameEngine.fimDeJogo();
meuAudioSource.PlayOneShot(somHit);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 122


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;

public class ControleObjeto : MonoBehaviour


{
float velocidade = 1.4f;
public Vector3 posicaoInicial;
Vector3 escalaInicial = new Vector3(0.01f,0.01f,0.01f);
float escala;
float dirEscala = 1.0f;

Vector3 offSetPosicao;
Vector3 offSetRotacao;

void Awake() {

offSetPosicao = Vector3.zero;
offSetRotacao = Vector3.zero;

//switch (gameObject.name) {
switch (gameObject.tag)
{
case "ARBUSTO": offSetPosicao.z += Random.Range(2.0f, -2.5f);
offSetRotacao.y += Random.Range(-90f, 90.0f);
break;
case "PEDRAS": offSetPosicao.z += Random.Range(2.0f, -2.5f);
offSetRotacao.y += Random.Range(-90f, 90.0f); break;
case "NUVEM": offSetPosicao += new Vector3(0, Random.Range(1.0f,
3.5f), Random.Range(2.0f, -2.5f));
offSetRotacao.x += Random.Range(-90f, 90.0f); break;
case "OVO": offSetPosicao.y += Random.Range(0.5f, 1.5f); break;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 123


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Start()
{
this.gameObject.transform.position = posicaoInicial;
this.gameObject.transform.position += offSetPosicao;
this.gameObject.transform.eulerAngles += offSetRotacao;
this.gameObject.transform.localScale = escalaInicial;

Invoke("apagaObjeto", 6.0f);
Invoke("someEscala", 5.5f);
}

void Update()
{
transform.position -= new Vector3(1.0f * velocidade * Time.deltaTime, 0,
0);

escala += 5.0f * Time.deltaTime * dirEscala;

float escalaNova = Mathf.Max(Mathf.Min(1.0f, escala),0.01f);


transform.localScale = new Vector3(escalaNova, escalaNova,
escalaNova);
}

void apagaObjeto()
{
Destroy(this.gameObject);
}

void someEscala() {
escala = 1.0f;
dirEscala = -1.0f;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 124


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 125


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;

public class ScrollingPiso : MonoBehaviour


{
float velocidade = 0.5f;
public Material materialPiso;
bool comecou;

void Start()
{

void Update()
{
if (comecou) {
materialPiso.SetTextureOffset("_MainTex", new Vector2(Time.time *
-velocidade, 0));
}
}

public void iniciarAnimacaoPiso() {


comecou = true;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 126


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Unity 2D - Menu Inicial Botão e


Transição entre Telas

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptMenuInicio : MonoBehaviour


{
public GameObject painelBlack;
GameObject meuCanvas;

void Start() {
meuCanvas = GameObject.Find("Meu Canvas");
}

public void IniciarGame()


{

painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, meuCanvas.transform);
//Instantiate(painelBlack);

Invoke("MudaCena", 2.0f);
}

void MudaCena() {

Tito Petri © 2022 - Todos os Direitos Reservados. 127


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

SceneManager.LoadScene("Cena JoKenPo");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}

using UnityEngine;

public class ScriptPainelBlack : MonoBehaviour


{
Animator controleAnima;
public AnimationClip animaAparece;
public AnimationClip animaSome;
public bool aparece;

void Awake() {
controleAnima = GetComponent<Animator>();
}

void Start()
{
Invoke("ApagaObjeto", 2.25f);

Tito Petri © 2022 - Todos os Direitos Reservados. 128


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

print(aparece);

if (aparece)
{
controleAnima.Play("Anima Painel Black Aparece");
//print("Tocou animacao Aparece");
}
else {
controleAnima.Play("Anima Painel Black Some");
//print("Tocou animacao Some");
}

void ApagaObjeto()
{
Destroy(this.gameObject);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 129


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo do JokemPo - Transição entre


Telas e Personagens

Tito Petri © 2022 - Todos os Direitos Reservados. 130


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptMenuInicio : MonoBehaviour


{
public GameObject painelBlack;
GameObject meuCanvas;

void Start() {
meuCanvas = GameObject.Find("Meu Canvas");
}

Tito Petri © 2022 - Todos os Direitos Reservados. 131


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

public void IniciarGame()


{
painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, meuCanvas.transform);
//Instantiate(painelBlack);
Invoke("MudaCena", 2.0f);
}

void MudaCena() {
SceneManager.LoadScene("Cena JoKenPo");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}
}

using UnityEngine;

public class ScriptPainelBlack : MonoBehaviour


{
Animator controleAnima;
public AnimationClip animaAparece;
public AnimationClip animaSome;
public bool aparece;

void Awake() {
controleAnima = GetComponent<Animator>();
}

Tito Petri © 2022 - Todos os Direitos Reservados. 132


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Start()
{
Invoke("ApagaObjeto", 2.25f);
print(aparece);
if (aparece)
{
controleAnima.Play("Anima Painel Black Aparece");
//print("Tocou animacao Aparece");
}
else {
controleAnima.Play("Anima Painel Black Some");
//print("Tocou animacao Some");
}
}

void ApagaObjeto()
{
Destroy(this.gameObject);
}
}

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptCenaJokenpo : MonoBehaviour


{

SpriteRenderer imagemFundo;

Tito Petri © 2022 - Todos os Direitos Reservados. 133


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

SpriteRenderer felpudo;
SpriteRenderer uruca;

public GameObject painelBlack;


GameObject meuCanvas;

void Start()
{
meuCanvas = GameObject.Find("Meu Canvas");

imagemFundo = GameObject.Find("IMAGEM
FUNDO").GetComponent<SpriteRenderer>();
felpudo =
GameObject.Find("FELPUDO").GetComponent<SpriteRenderer>();
uruca =
GameObject.Find("URUCA").GetComponent<SpriteRenderer>();
}

void Update()
{
// dimensões da imagem
float larguraImagem = imagemFundo.sprite.bounds.size.x;
float alturaImagem = imagemFundo.sprite.bounds.size.y;

// dimensões da tela
float alturaTela = Camera.main.orthographicSize * 2f;
float larguraTela = alturaTela / Screen.height * Screen.width;

//print(larguraImagem);

Tito Petri © 2022 - Todos os Direitos Reservados. 134


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//print(alturaImagem);
print("L:" + larguraTela + "A:" + alturaTela);

Vector2 novaEscala = transform.localScale;


novaEscala.x = larguraTela / larguraImagem + 0.25f;
novaEscala.y = alturaTela / alturaImagem;
imagemFundo.transform.localScale = novaEscala;

felpudo.transform.position = new Vector2(-larguraImagem / 4.0f,


-alturaTela / 2.0f + alturaTela / 5.0f);
uruca.transform.position = new Vector2(larguraImagem / 4.0f,
-alturaTela / 2.0f + alturaTela / 3.8f);
}

public void ClicouVoltar()


{

painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, meuCanvas.transform);
//Instantiate(painelBlack);
Invoke("MudaCena", 2.0f);
}

void MudaCena()
{
SceneManager.LoadScene("Menu Inicio");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 135


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Tito Petri © 2022 - Todos os Direitos Reservados. 136


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Cena JoKenPo - Parte I

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ScriptMenuInicio : MonoBehaviour


{
public GameObject painelBlack;
public GameObject botaoSom;
bool somLigado = true;
bool desligaSom = false;
Sprite botaoSomOn;
Sprite botaoSomOff;

GameObject meuCanvas;

AudioSource audioSource;

void Start()
{
meuCanvas = GameObject.Find("Meu Canvas");
audioSource = GetComponent<AudioSource>();

botaoSomOn = Resources.Load<Sprite>("botaoSomOn");
botaoSomOff = Resources.Load<Sprite>("botaoSomOff");
}

Tito Petri © 2022 - Todos os Direitos Reservados. 137


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Update()
{
if (desligaSom) {
audioSource.volume -= 1.0f * Time.deltaTime;
}
}

public void IniciarGame()


{
painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, meuCanvas.transform);
//Instantiate(painelBlack);
Invoke("MudaCena", 2.0f);
desligaSom = true;
}

void MudaCena()
{
SceneManager.LoadScene("Cena JoKenPo");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}

public void ClicaSom()


{
if (somLigado)
{
audioSource.volume = 0.0f;

Tito Petri © 2022 - Todos os Direitos Reservados. 138


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

botaoSom.GetComponent<Image>().sprite = botaoSomOff;
}
else
{
audioSource.volume = 1.0f;
botaoSom.GetComponent<Image>().sprite = botaoSomOn;
}
somLigado = !somLigado;
}

using UnityEngine;

public class ScriptPainelBlack : MonoBehaviour


{
Animator controleAnima;
public AnimationClip animaAparece;
public AnimationClip animaSome;
public bool aparece;

void Awake() {
controleAnima = GetComponent<Animator>();
}

void Start()
{
Invoke("ApagaObjeto", 2.25f);
//print(aparece);

Tito Petri © 2022 - Todos os Direitos Reservados. 139


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (aparece)
{
controleAnima.Play("Anima Painel Black Aparece");
//print("Tocou animacao Aparece");
}
else {
controleAnima.Play("Anima Painel Black Some");
//print("Tocou animacao Some");
}
}

void ApagaObjeto()
{
Destroy(this.gameObject);
}
}

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptCenaJokenpo : MonoBehaviour


{

SpriteRenderer imagemFundo;

SpriteRenderer felpudo;
SpriteRenderer uruca;

public GameObject painelBlack;

Tito Petri © 2022 - Todos os Direitos Reservados. 140


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject textoToqueParaIniciar;

GameObject meuCanvas;
AudioSource audioSource;
public AudioClip somJogada;

public GameObject balaoPensamento;


Sprite imagemHandsPensamento;

//public Sprite iconePedra, iconePapel, iconeTesoura;


public Sprite[] iconesPedraPapelTesoura;

int opcao = 0;
bool apertouJogar = false;

GameObject spriteBalao;
void Start()
{
audioSource = GetComponent<AudioSource>();
meuCanvas = GameObject.Find("Meu Canvas");
textoToqueParaIniciar = GameObject.Find("TEXTO TOQUE PARA
INICIAR");

imagemFundo = GameObject.Find("IMAGEM
FUNDO").GetComponent<SpriteRenderer>();
felpudo =
GameObject.Find("FELPUDO").GetComponent<SpriteRenderer>();
uruca =
GameObject.Find("URUCA").GetComponent<SpriteRenderer>();
}

Tito Petri © 2022 - Todos os Direitos Reservados. 141


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Update()
{
// dimensões da imagem
float larguraImagem = imagemFundo.sprite.bounds.size.x;
float alturaImagem = imagemFundo.sprite.bounds.size.y;

// dimensões da tela
float alturaTela = Camera.main.orthographicSize * 2f;
float larguraTela = alturaTela / Screen.height * Screen.width;

//print(larguraImagem);
//print(alturaImagem);
// print("L:" + larguraTela + "A:" + alturaTela);

Vector2 novaEscala = transform.localScale;


novaEscala.x = larguraTela / larguraImagem + 0.25f;
novaEscala.y = alturaTela / alturaImagem;
imagemFundo.transform.localScale = novaEscala;

felpudo.transform.position = new Vector2(-larguraImagem / 4.0f,


-alturaTela / 2.0f + alturaTela / 5.0f);
uruca.transform.position = new Vector2(larguraImagem / 4.0f,
-alturaTela / 2.0f + alturaTela / 3.8f);

if (Input.GetMouseButtonDown(0) &&
textoToqueParaIniciar.gameObject.activeInHierarchy)
{
ClicouJogar();

Tito Petri © 2022 - Todos os Direitos Reservados. 142


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (Input.GetKeyDown("right"))
{
opcao += 1;
if (opcao > 2)
{
opcao = 0;
}
TrocaTexturaIconeHand();
}

if (Input.GetKeyDown("left"))
{
opcao -= 1;
if (opcao < 0)
{
opcao = 2;
}
TrocaTexturaIconeHand();
}

if (Input.GetKeyDown("space"))
{
audioSource.Stop();
ExecutarJogada();
}

//print(opcao);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 143


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

public void ClicouVoltar()


{
painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, meuCanvas.transform);
//Instantiate(painelBlack);
Invoke("MudaCena", 2.0f);
}

void MudaCena()
{
SceneManager.LoadScene("Menu Inicio");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}

void ClicouJogar()
{
textoToqueParaIniciar.gameObject.SetActive(false);
audioSource.Play();
Invoke("ExecutarJogada", 10.0f);
Instantiate(balaoPensamento);

balaoPensamento.transform.position = felpudo.transform.position
+ new Vector3(1.0f, 1.0f, 0.0f);

spriteBalao = GameObject.Find("ICONE HANDS");


spriteBalao.GetComponent<SpriteRenderer>().sprite =
iconesPedraPapelTesoura[0];

Tito Petri © 2022 - Todos os Direitos Reservados. 144


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void TrocaTexturaIconeHand()
{
spriteBalao.GetComponent<SpriteRenderer>().sprite =
iconesPedraPapelTesoura[opcao];
}

void ExecutarJogada()
{
if (!apertouJogar) {
apertouJogar = true;
audioSource.PlayOneShot(somJogada);
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 145


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jo Ken Pô com Unity 2D - Projeto Final

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class MenuInicio : MonoBehaviour


{
public GameObject painelBlack;
AudioSource audioSource;

Tito Petri © 2022 - Todos os Direitos Reservados. 146


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

bool estadoSom = true;


bool clicouIniciar = false;

//Sprite botaoSomOn;
//Sprite botaoSomOff;

//public Sprite botaoSomOn, botaoSomOff;


Sprite botaoSomOn, botaoSomOff;
GameObject botaoSom;

void Start()
{
audioSource = GetComponent<AudioSource>();
audioSource.volume = 0.2f;

botaoSom = GameObject.Find("BOTAO MUSICA");

botaoSomOn = Resources.Load<Sprite>("botaoSomOn");
botaoSomOff = Resources.Load<Sprite>("botaoSomOff");
}

void Update()
{
if (clicouIniciar) {
audioSource.volume -= 0.25f * Time.deltaTime;
}
}

public void ClicouBotaoIniciar()


{

Tito Petri © 2022 - Todos os Direitos Reservados. 147


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//print("Clicou Iniciar");
if (!clicouIniciar) {
painelBlack.GetComponent<ScriptPainelBlack>().aparece =
true;
Instantiate(painelBlack, GameObject.Find("MEU
CANVAS").transform);
clicouIniciar = true;
Invoke("CarregarProximaCena", 2.0f);
}
}

void CarregarProximaCena() {
SceneManager.LoadScene("Cena Jogo Jokenpo");

//SceneManager.LoadScene(SceneManager.GetActiveScene().buildInd
ex + 1);
}

public void ClicouBotaoMusica()


{
//print("Clicou Música");

if (estadoSom)
{
//estadoSom = false;
audioSource.volume = 0.0f;
botaoSom.GetComponent<Image>().sprite = botaoSomOff;
}
else
{

Tito Petri © 2022 - Todos os Direitos Reservados. 148


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//estadoSom = true;
audioSource.volume = 0.2f;
botaoSom.GetComponent<Image>().sprite = botaoSomOn;
}
estadoSom = !estadoSom;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 149


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;

public class ScriptPainelBlack : MonoBehaviour


{
Animator meuAnimator;
public bool aparece;

void Start()
{
meuAnimator = GetComponent<Animator>();
Invoke("DestroiObjeto", 2.5f);

Tito Petri © 2022 - Todos os Direitos Reservados. 150


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (aparece)
{
meuAnimator.Play("AnimaPainelAparece");
}
else
{
meuAnimator.Play("AnimaPainelSome");
}

void DestroiObjeto()
{
Destroy(gameObject);
}
}

/*

POSICIONAR O BALAO DO PENSAMENTO


ICONES DAS MAOZINHAS DOS JOGADORES
POSICIONAR AS MAOZINHAS DOS JOGADORES

PONTUAÇÃO
PRESERVAR DADOS
*/

using UnityEngine.SceneManagement;

Tito Petri © 2022 - Todos os Direitos Reservados. 151


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;
using UnityEngine.UI;

public class CenaJoKemPo : MonoBehaviour


{
AudioSource meuAudioSource;

int jogadaFelpudo = 0;
int jogadaUruca = 0;

public static int pontosFelpudo;


public static int pontosUruca;

bool comecou = false;


bool jogou = false;
bool podeReiniciar = false;

public GameObject painelBlack;


public GameObject imagemFundo;
public GameObject balaoPensamento;
public GameObject splashWinner;

public AudioClip somJogada;


public AudioClip somWin;
public AudioClip somLose;
public AudioClip somEmpate;

public Color corWin;


public Color corLose;
public Color corEmpate;

Tito Petri © 2022 - Todos os Direitos Reservados. 152


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject iconeOpcaoBalao;

GameObject felpudo;
GameObject uruca;

public GameObject iconeMaoFelpudo;


public GameObject iconeMaoUruca;

public Sprite[] texturasIconeMao;

private void Start()


{
meuAudioSource = GetComponent<AudioSource>();
jogadaUruca = Random.Range(0, 3);

GameObject.Find("PONTUACAO
FELPUDO").GetComponent<Text>().text = "" + pontosFelpudo;
GameObject.Find("PONTUACAO
URUCA").GetComponent<Text>().text = "" + pontosUruca;

float larguraImagem =
imagemFundo.GetComponent<SpriteRenderer>().sprite.bounds.size.x;
float alturaImagem =
imagemFundo.GetComponent<SpriteRenderer>().sprite.bounds.size.y;

// dimensoes em pixels
//print(Screen.width);
//print(Screen.height);

Tito Petri © 2022 - Todos os Direitos Reservados. 153


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//altura da tela
float alturaTela = Camera.main.orthographicSize * 2.0f;

// largura da tela
float larguraTela = alturaTela / Screen.height * Screen.width;

Vector2 novaEscala = transform.localScale;


novaEscala.x = larguraTela / larguraImagem;
novaEscala.y = alturaTela / alturaImagem;

imagemFundo.transform.localScale = novaEscala;

felpudo = GameObject.Find("FELPUDO");
uruca = GameObject.Find("URUCA");

felpudo.transform.position = new Vector2(-4, -alturaTela / 3.3f);


uruca.transform.position = new Vector2(4, -alturaTela / 4);
}

private void Update()


{
if (Input.GetMouseButton(0) && podeReiniciar) {
RecarregarCenaJogo();
}

if (Input.GetMouseButtonDown(0) && !comecou && !jogou)


{
balaoPensamento.gameObject.SetActive(true);

Instantiate(balaoPensamento, felpudo.transform);

Tito Petri © 2022 - Todos os Direitos Reservados. 154


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

comecou = true;
GameObject.Find("TEXTO
INSTRUCOES").GetComponent<Text>().text = "Setas (ESQ/DIR)
Seleciona Jogada. ESPAÇO Jogar.";
meuAudioSource.Play();
Invoke("ExecutarJogada", 10.0f);
}

if (Input.GetKeyDown("right") && comecou && !jogou)


{
jogadaFelpudo++;
if (jogadaFelpudo > 2)
{
jogadaFelpudo = 0;
}
GameObject.Find("ICONE OPCAO
JOGADA").GetComponent<SpriteRenderer>().sprite =
texturasIconeMao[jogadaFelpudo];
}

if (Input.GetKeyDown("left") && comecou && !jogou)


{
jogadaFelpudo--;
if (jogadaFelpudo < 0)
{
jogadaFelpudo = 2;
}
GameObject.Find("ICONE OPCAO
JOGADA").GetComponent<SpriteRenderer>().sprite =
texturasIconeMao[jogadaFelpudo];

Tito Petri © 2022 - Todos os Direitos Reservados. 155


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (Input.GetKeyDown(KeyCode.Space) && comecou && !jogou)


{
ExecutarJogada();
}
}

void ExecutarJogada()
{
if (!jogou)
{
GameObject.Find("TEXTO
INSTRUCOES").GetComponent<Text>().text = "";
jogou = true;
meuAudioSource.Stop();
meuAudioSource.PlayOneShot(somJogada);
GameObject.Find("BALAO
PENSAMENTO(Clone)").gameObject.SetActive(false);
Invoke("AdicionaSplash", 4.0f);
Invoke("AdicionaMaozinhas", 2.0f);
}
}

public void CarregarMenuInicio()


{
painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, GameObject.Find("MEU
CANVAS").transform);
Invoke("CarregarProximaCena", 2.0f);

Tito Petri © 2022 - Todos os Direitos Reservados. 156


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void CarregarProximaCena()
{
SceneManager.LoadScene("Menu Inicio");
}

public void RecarregarCenaJogo()


{
painelBlack.GetComponent<ScriptPainelBlack>().aparece = true;
Instantiate(painelBlack, GameObject.Find("MEU
CANVAS").transform);
Invoke("CarregarCenaJokenpo", 2.0f);
}

void CarregarCenaJokenpo()
{
SceneManager.LoadScene("Cena Jogo Jokenpo");
}

void AdicionaSplash()
{
Instantiate(splashWinner);
if (jogadaFelpudo == jogadaUruca)
{

Tito Petri © 2022 - Todos os Direitos Reservados. 157


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//print("Empatou");
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().text = "EMPATOU";
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().color = corEmpate;
//GameObject.Find("ICONE TOMATE
EMPATE").gameObject.SetActive(true);
//GameObject.Find("ICONE FELPUDO
WIN").gameObject.SetActive(false);
//GameObject.Find("ICONE URUCA
WIN").gameObject.SetActive(false);

AtualizaTextoSplash("EMPATOU", corEmpate,true, false, false,


somEmpate);

}
else if (((jogadaFelpudo == 0) && (jogadaUruca == 2)) ||
((jogadaFelpudo == 1) && (jogadaUruca == 0)) ||
((jogadaFelpudo == 2) && (jogadaUruca == 1)))
{
//print("Jogador A Venceu!");
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().text = "FELPUDO WINS";
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().color = corWin;
//GameObject.Find("ICONE TOMATE
EMPATE").gameObject.SetActive(false);
//GameObject.Find("ICONE FELPUDO
WIN").gameObject.SetActive(true);
//GameObject.Find("ICONE URUCA

Tito Petri © 2022 - Todos os Direitos Reservados. 158


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

WIN").gameObject.SetActive(false);
pontosFelpudo++;
AtualizaTextoSplash("FELPUDO WINS", corEmpate, false, true,
false, somWin);
}
else if (((jogadaUruca == 0) && (jogadaFelpudo == 2)) ||
((jogadaUruca == 1) && (jogadaFelpudo == 0)) ||
((jogadaUruca == 2) && (jogadaFelpudo == 1)))
{
//print("Jogador B Venceu!");
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().text = "URUCA WINS";
//GameObject.Find("TEXTO
WINNER").GetComponent<Text>().color = corLose;
//GameObject.Find("ICONE TOMATE
EMPATE").gameObject.SetActive(false);
//GameObject.Find("ICONE FELPUDO
WIN").gameObject.SetActive(false);
//GameObject.Find("ICONE URUCA
WIN").gameObject.SetActive(true);
pontosUruca++;
AtualizaTextoSplash("URUCA WINS", corEmpate, false, false,
true, somLose);

void AtualizaTextoSplash(string mensagem, Color cor, bool icon1,


bool icon2, bool icon3, AudioClip som) {

Tito Petri © 2022 - Todos os Direitos Reservados. 159


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject.Find("TEXTO WINNER").GetComponent<Text>().text
= mensagem;
GameObject.Find("TEXTO
WINNER").GetComponent<Text>().color = cor;
GameObject.Find("ICONE TOMATE
EMPATE").gameObject.SetActive(icon1);
GameObject.Find("ICONE FELPUDO
WIN").gameObject.SetActive(icon2);
GameObject.Find("ICONE URUCA
WIN").gameObject.SetActive(icon3);
meuAudioSource.PlayOneShot(som);
Invoke("PodeReiniciar", 1.0f);

GameObject.Find("PONTUACAO
FELPUDO").GetComponent<Text>().text = "" + pontosFelpudo;
GameObject.Find("PONTUACAO
URUCA").GetComponent<Text>().text = "" + pontosUruca;
}

void PodeReiniciar() {
podeReiniciar = true;
GameObject.Find("TEXTO
INSTRUCOES").GetComponent<Text>().text = "Toque para Jogar
Novamente.";
}

void AdicionaMaozinhas() {

iconeMaoUruca.gameObject.GetComponent<SpriteRenderer>().sprite =
texturasIconeMao[jogadaUruca];

Tito Petri © 2022 - Todos os Direitos Reservados. 160


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Instantiate(iconeMaoUruca, uruca.transform);

iconeMaoFelpudo.GetComponent<SpriteRenderer>().flipX = true;

iconeMaoFelpudo.gameObject.GetComponent<SpriteRenderer>().sprit
e = texturasIconeMao[jogadaFelpudo];
Instantiate(iconeMaoFelpudo, felpudo.transform);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 161


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Texto com Efeito de Máquina de


Escrever

using UnityEngine;
using UnityEngine.UI;

public class ScriptTypeWriter : MonoBehaviour


{
//string texto = "As pessoas boas devem amar seus inimigos.\"" +

Tito Petri © 2022 - Todos os Direitos Reservados. 162


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

// "\n\"A vingança nunca é plena, mata a alma e


envenena.\"\n\nSeu Madruga";

public string texto ;


public AudioClip efeito;
AudioSource audioSource;

GameObject meuTexto;
Text campoTexto;
int contador = 0;
bool acabou = false;

void Start()
{
audioSource = GetComponent<AudioSource>();

meuTexto = GameObject.Find("TEXTO PENSAMENTO");


campoTexto = meuTexto.GetComponent<Text>();
campoTexto.text = "";

//GameObject.Find("TEXTO
PENSAMENTO").GetComponent<Text>().text = "";

//InvokeRepeating("AtualizaTexto", 0.0f, 0.1f);

void AtualizaTexto()
{
if (contador < texto.Length) {

Tito Petri © 2022 - Todos os Direitos Reservados. 163


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

contador++;
campoTexto.text = texto.Substring(0, contador);
audioSource.PlayOneShot(efeito);
}
}

private void Update()


{
if (!acabou) {
contador = (int)(Time.time * 10.0f);
print(contador);

if (contador <= texto.Length)


{
campoTexto.text = texto.Substring(0, contador);
}
else {
acabou = true;
audioSource.Stop();
}
}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 164


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Operações com Vetores - Avançado

using UnityEngine;

public class ExemplosOperacoesComVetores : MonoBehaviour


{
public GameObject bolinha;

void Update()
{
Vector3 posicaoBolinha = bolinha.gameObject.transform.position;
print("Posição: " + posicaoBolinha);

// magnitude - distancia entre o Zero e o Vetor


print("Magnitude: " + posicaoBolinha.magnitude);

// normalized - direção entre -1.0 e 1.0


print("Normalizado: " + posicaoBolinha.normalized);

//Transforma Coordenadas do Mundo em Local.


print("Inverse Transform: " +
transform.InverseTransformDirection(posicaoBolinha)) ;

//Projeta um vetor em um plano definido por uma ortogonal normal ao


plano
print("Project On Plane: " + Vector3.ProjectOnPlane(posicaoBolinha, new
Vector3(0, 0, 0)));

//Retorna o ângulo em radianos cujo Tan é y/x.


print("Math atan: " + Mathf.Atan2(posicaoBolinha.x, posicaoBolinha.z));

Tito Petri © 2022 - Todos os Direitos Reservados. 165


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

//Interpola linearmente entre ae b por t. O parâmetro t está fixado no


intervalo [0, 1].
print("Math lerp: " + Mathf.Lerp(180, 360, posicaoBolinha.z));

}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 166


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Serialized Field e Mathf.Lerp

using UnityEngine;

public class ScriptExemploLerpSlider : MonoBehaviour


{
[SerializeField]
bool estado = true;

[SerializeField]
string nome = "Felpudo";

[SerializeField]
int idade = 12;

public float altura = 1.5f;


public double peso = 50.5f;

public GameObject box;

[SerializeField]
[Range(0.0f, 1.0f)]
private float porcentagemX = 0.5f;

[SerializeField]
[Range(0.0f, 1.0f)]
private float porcentagemZ = 0.5f;

private void Update()

Tito Petri © 2022 - Todos os Direitos Reservados. 167


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
float px = Mathf.Lerp(-5.0f,5.0f,porcentagemX);
float pz = Mathf.Lerp(-5.0f, 5.0f, porcentagemZ);
box.transform.position = new Vector3(px,0,pz);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 168


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Movimento Player Normalizado


(Teclado)

using UnityEngine;

public class MovimentoPlayerNormalizadoTeclado : MonoBehaviour


{
CharacterController controle;

float velocidade = 5.0f;


float pulo = 10.0f;
float giro;
Vector3 meuVetor;
Vector3 vetorDirecao;
Vector3 frenteCamera;
Transform transformCamera;

void Start()
{
controle = GetComponent<CharacterController>();
transformCamera = Camera.main.transform;
}

void Update()
{
frenteCamera = Vector3.Scale(transformCamera.forward, new
Vector3(1, 0, 1)).normalized;
meuVetor = Input.GetAxis("Vertical") * frenteCamera +

Tito Petri © 2022 - Todos os Direitos Reservados. 169


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Input.GetAxis("Horizontal") * transformCamera.right;
vetorDirecao.y -= 10f * Time.deltaTime;
controle.Move(vetorDirecao * Time.deltaTime);

if (Input.GetKey(KeyCode.LeftShift)) controle.Move(meuVetor *
velocidade * 5.0f * Time.deltaTime);
else controle.Move(meuVetor * velocidade * Time.deltaTime);

if (meuVetor.magnitude > 1.0f) meuVetor.Normalize();

meuVetor = transform.InverseTransformDirection(meuVetor);
meuVetor = Vector3.ProjectOnPlane(meuVetor, Vector3.zero);

giro = Mathf.Atan2(meuVetor.x, meuVetor.z);


controle.SimpleMove(Physics.gravity);
AplicaRotacao();
if (Input.GetButton("Jump") && controle.isGrounded)
vetorDirecao.y = pulo;
if (Input.GetKeyDown("left shift"))
this.gameObject.transform.position = new Vector3(0, 0, 0);
}

void AplicaRotacao()
{
float velocidadeGiro = Mathf.Lerp(180, 360, meuVetor.z);
transform.Rotate(0, giro * (velocidadeGiro * 2) *
Time.deltaTime, 0);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 170


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Movimento Player Normalizado


(Joystick)
using UnityEngine;

public class MovimentoPlayerNormalizadoJoystick : MonoBehaviour


{
CharacterController controle;

float velocidade = 5.0f;


float pulo = 10.0f;
float giro;
Vector3 meuVetor;
Vector3 vetorDirecao;
Vector3 frenteCamera;
Transform transformCamera;

Joystick direcional;
ScriptBotaoX botaoX;

void Start()
{
controle = GetComponent<CharacterController>();
transformCamera = Camera.main.transform;

direcional = FindObjectOfType<Joystick>();
botaoX = FindObjectOfType<ScriptBotaoX>();
}

void Update()
{
frenteCamera = Vector3.Scale(transformCamera.forward, new Vector3(1, 0,
1)).normalized;

// INPUT PELO TECLADO


//meuVetor = Input.GetAxis("Vertical") * frenteCamera +

Tito Petri © 2022 - Todos os Direitos Reservados. 171


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Input.GetAxis("Horizontal") * transformCamera.right;

//Input PELO JOYTICK VIRTUAL


meuVetor = direcional.Vertical * frenteCamera + direcional.Horizontal *
transformCamera.right;

vetorDirecao.y -= 10f * Time.deltaTime;


controle.Move(vetorDirecao * Time.deltaTime);

if (Input.GetKey(KeyCode.LeftShift)) controle.Move(meuVetor * velocidade *


5.0f * Time.deltaTime);
else controle.Move(meuVetor * velocidade * Time.deltaTime);

if (meuVetor.magnitude > 1.0f) meuVetor.Normalize();

meuVetor = transform.InverseTransformDirection(meuVetor);
meuVetor = Vector3.ProjectOnPlane(meuVetor, Vector3.zero);

giro = Mathf.Atan2(meuVetor.x, meuVetor.z);


controle.SimpleMove(Physics.gravity);
AplicaRotacao();
if ((Input.GetButton("Jump") || botaoX.apertou) && controle.isGrounded)
vetorDirecao.y = pulo;
if (Input.GetKeyDown("left shift")) this.gameObject.transform.position = new
Vector3(0, 0, 0);
}

void AplicaRotacao()
{
float velocidadeGiro = Mathf.Lerp(180, 360, meuVetor.z);
transform.Rotate(0, giro * (velocidadeGiro * 2) * Time.deltaTime, 0);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 172


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Jogo da Memória com Unity 2D

using UnityEngine;

public class ScriptCarta : MonoBehaviour


{
public int indiceCarta;
bool virou = false;

Tito Petri © 2022 - Todos os Direitos Reservados. 173


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Sprite cartaVerso;
Sprite[] cartas;
Animator meuAnimator;
AudioClip locucao;
void Update()
{
}
void Start()
{
cartas = GameObject.Find("MEU GAME
ENGINE").GetComponent<JogoDaMemoria>().cartas;
string url = "Locucoes\\" + cartas[indiceCarta].name;
locucao = Resources.Load<AudioClip>(url);
cartaVerso = GetComponent<SpriteRenderer>().sprite;
meuAnimator = this.gameObject.GetComponent<Animator>();
}

private void OnMouseDown()


{
bool podeJogar = GameObject.Find("MEU GAME
ENGINE").GetComponent<JogoDaMemoria>().podeJogar;

if (!virou && podeJogar)


{
virou = true;
meuAnimator.Play("AnimaCartaFecha");
Invoke("MudaTexturaCarta", 0.5f);
GameObject.Find("MEU GAME
ENGINE").GetComponent<JogoDaMemoria>().ClicouCarta(this.gameO
bject);

Tito Petri © 2022 - Todos os Direitos Reservados. 174


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
}

void MudaTexturaCarta()
{
if (virou) {

this.gameObject.GetComponent<AudioSource>().PlayOneShot(locucao
);
}
GetComponent<SpriteRenderer>().sprite = cartas[indiceCarta];
}

public void VoltaTexturaCartaVerso()


{
Invoke("MudaTexturaVerso", 0.5f);
}

public void MostrarCartasNoInicio()


{
meuAnimator.Play("AnimaCartaFecha");
Invoke("MudaTexturaCarta", 0.5f);
Invoke("OcultarCartasNoInicio", 5.0f);
}

void OcultarCartasNoInicio()
{
meuAnimator.Play("AnimaCartaFecha");
Invoke("MudaTexturaVerso", 0.5f);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 175


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void MudaTexturaVerso()
{
GetComponent<SpriteRenderer>().sprite = cartaVerso;
virou = false;
}
}

using System.Collections;
using UnityEngine;

public class JogoDaMemoria : MonoBehaviour


{
public GameObject carta;
public int colunas;
public bool mostrarDica;
public bool podeJogar;

public Sprite[] cartas;


GameObject textoFimDeJogo;
ArrayList listaNumerosRandom = new ArrayList();

int jogadas;
int pontos;
GameObject[] cartasClicadas;
ScriptCarta[] listaCartas;

void Update()
{

Tito Petri © 2022 - Todos os Direitos Reservados. 176


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
void Start()
{
float larguraCarta = 5.0f;
float alturaCarta = 7.0f;
Camera.main.transform.position = new Vector3(colunas *
larguraCarta / 2.0f - larguraCarta / 2.0f,
cartas.Length*2 / colunas * alturaCarta / 2.0f - alturaCarta / 2.0f,
-1.0f);

void Awake()
{
textoFimDeJogo = GameObject.Find("TEXTO FIM DE JOGO");
textoFimDeJogo.gameObject.SetActive(false);

cartasClicadas = new GameObject[2];


for (int i = 0; i < cartas.Length * 2; i++)
{
int indiceRandom = Random.Range(0,
listaNumerosRandom.Count);
int indice = (int)(Mathf.Floor(i / 2.0f));
listaNumerosRandom.Insert(indiceRandom, indice);
}

for (int i = 0; i < cartas.Length * 2; i++)


{
GameObject cartaNova = Instantiate(carta);
cartaNova.gameObject.transform.position = new Vector3(i %

Tito Petri © 2022 - Todos os Direitos Reservados. 177


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

colunas * 5.0f, Mathf.Floor(i / colunas) * 7.0f, 0);


cartaNova.GetComponent<ScriptCarta>().indiceCarta =
(int)listaNumerosRandom[i];
}

listaCartas = FindObjectsOfType<ScriptCarta>();

if (mostrarDica)
{
Invoke("MostrarCartas", 1.0f);
}
else
{
podeJogar = true;
}

public void ClicouCarta(GameObject carta)


{
cartasClicadas[jogadas] = carta;
jogadas++;
if (jogadas > 1)
{
Invoke("JogouSegundaCarta", 2.0f);
podeJogar = false;
}
}

void JogouSegundaCarta()

Tito Petri © 2022 - Todos os Direitos Reservados. 178


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
podeJogar = true;

if (cartasClicadas[0].GetComponent<ScriptCarta>().indiceCarta ==
cartasClicadas[1].GetComponent<ScriptCarta>().indiceCarta)
{
pontos++;
Destroy(cartasClicadas[0]);
Destroy(cartasClicadas[1]);
VerificaFimDeJogo();
}
else
{

cartasClicadas[0].GetComponent<Animator>().Play("AnimaCartaFecha"
);

cartasClicadas[1].GetComponent<Animator>().Play("AnimaCartaFecha"
);

cartasClicadas[0].GetComponent<ScriptCarta>().VoltaTexturaCartaVers
o();

cartasClicadas[1].GetComponent<ScriptCarta>().VoltaTexturaCartaVers
o();
}
jogadas = 0;
cartasClicadas = new GameObject[2];
}

Tito Petri © 2022 - Todos os Direitos Reservados. 179


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void MostrarCartas()
{
foreach (ScriptCarta c in listaCartas)
{
c.MostrarCartasNoInicio();
}
Invoke("PodeJogar", 5.0f);
}

void VerificaFimDeJogo()
{
if (pontos == cartas.Length)
{
textoFimDeJogo.gameObject.SetActive(true);
}
}

void PodeJogar()
{
podeJogar = true;
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 180


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Genius (Simon) em Unity 2D

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GeniusGameEngine : MonoBehaviour


{
// LISTA COM SEQUENCIA DE JOGADAS DA ESTÁTUA
int[] sequenciaAleatoria = new int[5];

// LISTA DE BOTOES
GameObject[] botoes = new GameObject[4];

Tito Petri © 2022 - Todos os Direitos Reservados. 181


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject textoFimDeJogo;

// CONTADORES DE JOGADAS
int contaJogadaEstatua = 0;
int contaJogadaPepe = 0;

// CONTADOR DA JOGADA ATUAL


int rodada = 0;

// HABILITANDO A JOGADA
public bool podeJogar;

AudioSource meuAudioSource;
public AudioClip somWin;
public AudioClip somLose;

int contaPiscadasFinal = 20;


Sprite spritePepe;

void Start()
{
spritePepe = Resources.Load<Sprite>("PEPE02");
GameObject.Find("GUARANA").GetComponent<Animator>().speed = 0.0f;
meuAudioSource = GetComponent<AudioSource>();

// ESCONDE O TEXTO GAME WIN/LOSE


textoFimDeJogo = GameObject.Find("TEXTO FIM DE JOGO");
textoFimDeJogo.SetActive(false);

//ADICIONA BOTOES A UM ARRAY


for (int i = 0; i < botoes.Length; i++)
{
botoes[i] = GameObject.Find("BOTAO" + i);
}

// CRIA UMA LISTA COM AS JOGADAS ALEATÓRIAS DA ESTÁTUA


for (int i = 0; i < sequenciaAleatoria.Length; i++)
{
sequenciaAleatoria[i] = Random.Range(0, 4);
}

Tito Petri © 2022 - Todos os Direitos Reservados. 182


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

// INICIA O JOGO
Invoke("EstatuaJoga", 1.0f);
}

void EstatuaJoga()
{
TocaDisco(sequenciaAleatoria[contaJogadaEstatua]);

if (contaJogadaEstatua < rodada)


{
Invoke("EstatuaJoga", 1.0f);
}
else
{
print("Pode Jogar!");
podeJogar = true;
contaJogadaPepe = 0;
}
contaJogadaEstatua++;
}

void TocaDisco(int indiceBotao)


{
botoes[indiceBotao].GetComponent<BotaoGenius>().AcendeBotao();
}

public void VerificaJogadaDoPepe(int botaoPressionado)


{
if (botaoPressionado == sequenciaAleatoria[contaJogadaPepe])
{
print("Acertou");

if (contaJogadaPepe == rodada)
{
rodada++;

if (rodada==sequenciaAleatoria.Length) {
EventoGameWin();
}
else {
contaJogadaEstatua = 0;

Tito Petri © 2022 - Todos os Direitos Reservados. 183


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

podeJogar = false;
Invoke("EstatuaJoga", 1.0f);
}
}

contaJogadaPepe++;
}
else
{
print("Errou");
AtualizaTextoFimDeJogo("PERDEU !");
podeJogar = false;
TocaDisco(0);
TocaDisco(1);
TocaDisco(2);
TocaDisco(3);
Invoke("RecarregarCena", 1.0f);
meuAudioSource.PlayOneShot(somLose);
}
}

public void AtualizaTextoFimDeJogo(string mensagem)


{
textoFimDeJogo.GetComponent<Text>().text = mensagem;
textoFimDeJogo.SetActive(true);
}

void EventoGameWin() {
AtualizaTextoFimDeJogo("PARABÉNS !");
meuAudioSource.PlayOneShot(somWin);
podeJogar = false;
DisparaDiscoFinalWin();
GameObject.Find("GUARANA").GetComponent<Animator>().speed = 1.0f;
GameObject.Find("PEPE").GetComponent<SpriteRenderer>().sprite = spritePepe;
}

void DisparaDiscoFinalWin() {
print("voce venceu!!!!!");
if (contaPiscadasFinal > 0)
{
TocaDisco(contaPiscadasFinal % 4);

Tito Petri © 2022 - Todos os Direitos Reservados. 184


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Invoke("DisparaDiscoFinalWin", 0.25f);
}
else {
RecarregarCena();
}
contaPiscadasFinal--;
}

void RecarregarCena() {
SceneManager.LoadScene("SampleScene");
}
}

using UnityEngine;

public class BotaoGenius : MonoBehaviour


{
public string tecla;
Animator meuAnimador;
AudioSource meuAudioSource;
AudioClip meuAudioClip;

int indiceBotao;

private void Start()


{
meuAnimador = GetComponent<Animator>();
meuAudioSource = gameObject.AddComponent<AudioSource>();
string audioUrl = "SONS\\" + gameObject.GetComponent<SpriteRenderer>().sprite.name;
meuAudioClip = Resources.Load<AudioClip>(audioUrl);

string nome = gameObject.name;


string ultimoDigito = nome.Substring(nome.Length - 1);

indiceBotao = int.Parse(ultimoDigito);
}

private void OnMouseDown()


{

Tito Petri © 2022 - Todos os Direitos Reservados. 185


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

if (GameObject.Find("MEU GAME
ENGINE").GetComponent<GeniusGameEngine>().podeJogar)
{
AcendeBotao();
VerificaJogada();
}
}

private void Update()


{
if (Input.GetKeyDown(tecla) && GameObject.Find("MEU GAME
ENGINE").GetComponent<GeniusGameEngine>().podeJogar)
{
AcendeBotao();
VerificaJogada();
}
}

public void AcendeBotao()


{
meuAnimador.Play("AnimaPiscaLuz");
meuAudioSource.PlayOneShot(meuAudioClip);
}

void VerificaJogada() {
GameObject.Find("MEU GAME
ENGINE").GetComponent<GeniusGameEngine>().VerificaJogadaDoPepe(indiceBotao);
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 186


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

FlappyBird em Unity2D

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptRedimensionaFundo : MonoBehaviour


{
private float larguraTela;

Tito Petri © 2022 - Todos os Direitos Reservados. 187


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Awake()
{
SpriteRenderer grafico =
GetComponent<SpriteRenderer>();

float larguraImagem = grafico.sprite.bounds.size.x;


float alturaImagem = grafico.sprite.bounds.size.y;

float alturaTela = Camera.main.orthographicSize * 2f;

larguraTela = alturaTela / Screen.height * Screen.width;

Vector2 novaEscala = transform.localScale;


novaEscala.x = larguraTela / larguraImagem + 0.25f;
novaEscala.y = alturaTela / alturaImagem;
transform.localScale = novaEscala;
}
}

using UnityEngine;

public class ScriptImagemIdle : MonoBehaviour


{
[Header("Som de Entrada")]
public AudioClip audioClipEntrada;
bool tocouSom;

Tito Petri © 2022 - Todos os Direitos Reservados. 188


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

[Header("Animação de Entrada")]
public bool fadeInicial;
public bool escalaInicial;
public float velocidadeEntrada = 1.0f;
public float atrasoAnimacaoEntrada = 0.0f;

[Space(10)]
public bool animaSlide;
public float offSetX = 2;
public float offSetY = 2;

[Header("Animação em Loop")]
public bool move;
public bool gira;
public bool some;
public bool cresce;

public float amplitudeX = 1.0f;


public float amplitudeY = 1.0f;
public float frequencia = 1.0f;

public float opacidadeMin = 0.25f;


public float opacidadeMax = 0.95f;

public float escalaMin = 0.5f;


public float escalaMax = 1.0f;

bool podeComecar;

SpriteRenderer meuSpriteRenderer;

Tito Petri © 2022 - Todos os Direitos Reservados. 189


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Vector3 posicaoInicial;
Vector3 rotacaoInicial;

private void Start()


{
meuSpriteRenderer = GetComponent<SpriteRenderer>();
posicaoInicial = this.gameObject.transform.position;
rotacaoInicial = this.gameObject.transform.eulerAngles;

if (animaSlide) {
this.gameObject.transform.position -= new Vector3(offSetX,
offSetY, 0);
}

if (fadeInicial)
{
meuSpriteRenderer.color = new Color(1, 1, 1, 0);
}
if (escalaInicial)
{
this.gameObject.transform.localScale = new Vector3(0, 0, 0);
}

Invoke("PodeComecar", atrasoAnimacaoEntrada);
}
void PodeComecar() {
podeComecar = true;
}

Tito Petri © 2022 - Todos os Direitos Reservados. 190


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

void Update()
{
if (podeComecar) {
if (audioClipEntrada != null && !tocouSom)
{
tocouSom = true;

Camera.main.GetComponent<AudioSource>().PlayOneShot(audioClipE
ntrada);
}

if (fadeInicial)
{
float opacidade = (Time.time-atrasoAnimacaoEntrada) /
velocidadeEntrada;
meuSpriteRenderer.color = new Color(1, 1, 1, opacidade);
}

if (escalaInicial)
{
float escala = Mathf.Min((Time.time -
atrasoAnimacaoEntrada) / velocidadeEntrada, 1.0f);
this.gameObject.transform.localScale = new Vector3(escala,
escala, 1);
}

if (move)
{
float px = (Mathf.Sin((Time.time - atrasoAnimacaoEntrada) *
frequencia) * amplitudeX);

Tito Petri © 2022 - Todos os Direitos Reservados. 191


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

float py = (Mathf.Cos((Time.time - atrasoAnimacaoEntrada) *


frequencia) * amplitudeY);
this.gameObject.transform.position = posicaoInicial + new
Vector3(px, py, 0);
}

if (gira)
{
float angulo = Mathf.Sin((Time.time - atrasoAnimacaoEntrada)
* frequencia) * amplitudeX;
this.transform.eulerAngles = rotacaoInicial + new Vector3(0,
0, angulo);
}

if (cresce)
{
float escala = ((Mathf.Sin((Time.time -
atrasoAnimacaoEntrada) * frequencia) / 2.0f) + 0.5f);
escala = Mathf.Lerp(escalaMin, escalaMax, escala);
this.gameObject.transform.localScale = new Vector3(escala,
escala, 1);
}

if (some)
{
float opacidade = ((Mathf.Sin((Time.time -
atrasoAnimacaoEntrada) * frequencia) / 2.0f) + 0.5f);
opacidade = Mathf.Lerp(opacidadeMin, opacidadeMax,
opacidade);
meuSpriteRenderer.color = new Color(1, 1, 1, opacidade);

Tito Petri © 2022 - Todos os Direitos Reservados. 192


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

print(opacidade);
}
}
}
}

using UnityEngine;
using UnityEngine.SceneManagement;

public class ScriptClicaJogar : MonoBehaviour


{
private void OnMouseUp()
{
ClicouJogar();
}

public void ClicouJogar()


{
SceneManager.LoadScene("CENA JOGO");
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 193


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

using UnityEngine;

public class ScriptScrollingBackground : MonoBehaviour


{

bool comecou;

public void ComecouJogo()


{
GetComponent<Rigidbody2D>().velocity = new
Vector2(-2, 0);
if (this.name == "FUNDO B")

Tito Petri © 2022 - Todos os Direitos Reservados. 194


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
transform.position = new Vector2(19.1f, 0f);
}
comecou = true;
}

void Update()
{
if (comecou) {
if (transform.position.x <= -19.1f)
{
transform.position = new Vector2(19.1f,
0f);
}
}
}
}

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class ScriptGameEngine : MonoBehaviour


{
GameObject[] passarinhos;
GameObject jogador;
GameObject cucaLambe;
GameObject cucaGrito;
GameObject textoPontos;

Tito Petri © 2022 - Todos os Direitos Reservados. 195


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject textoMensagem;

AudioClip somBate;
AudioClip somVoa;
AudioClip somPonto;

bool comecou;
public bool acabou;
bool podeReiniciar;
int pontos;

void Start()
{
cucaLambe = GameObject.Find("CUCA LAMBE");
cucaGrito = GameObject.Find("CUCA GRITO");
cucaGrito.gameObject.SetActive(false);
textoPontos = GameObject.Find("PONTOS");
textoPontos.GetComponent<Text>().text = "" + pontos;
textoMensagem = GameObject.Find("MENSAGEM");

passarinhos = new GameObject[3];


passarinhos[0] = Resources.Load("AMARELINHO") as
GameObject;
passarinhos[1] = Resources.Load("MARRONZINHO") as
GameObject;
passarinhos[2] = Resources.Load("VERDINHO") as GameObject;

jogador = Instantiate(passarinhos[Random.Range(0, 3)]);


jogador.GetComponent<Rigidbody2D>().isKinematic = true;
jogador.transform.position += new Vector3(-5.0f, 0, 0);

Tito Petri © 2022 - Todos os Direitos Reservados. 196


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

somBate = Resources.Load<AudioClip>("SOM BATEU");


somPonto = Resources.Load<AudioClip>("SOM PONTOS");
somVoa = Resources.Load<AudioClip>("SOM VOA");
somBate = Resources.Load<AudioClip>("SOM BATEU");

void Update()
{
if (Input.GetMouseButtonDown(0) && podeReiniciar)
{
SceneManager.LoadScene("CENA JOGO");
}

if (Input.GetMouseButtonDown(0) && !comecou)


{
comecou = true;

Invoke("CriaPilares", Random.Range(1.0f, 3.0f));


Invoke("CriaSementes", Random.Range(3.0f, 5.0f));

GameObject.Find("FUNDO
A").GetComponent<ScriptScrollingBackground>().ComecouJogo();
GameObject.Find("FUNDO
B").GetComponent<ScriptScrollingBackground>().ComecouJogo();
textoMensagem.SetActive(false);
cucaLambe.SetActive(false);

Tito Petri © 2022 - Todos os Direitos Reservados. 197


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

cucaGrito.SetActive(true);
cucaGrito.GetComponent<Rigidbody2D>().velocity = new
Vector2(-2, 0);
}

if (Input.GetMouseButtonDown(0) && comecou)


{
GetComponent<AudioSource>().PlayOneShot(somVoa);
}
}

public void AtualizaScore()


{
if (!acabou)
{
pontos++;
textoPontos.GetComponent<Text>().text = "" + pontos;
GetComponent<AudioSource>().PlayOneShot(somPonto);
}
}

public void FimDeJogo()


{
if (!acabou)
{
acabou = true;
jogador.GetComponent<Rigidbody2D>().velocity = Vector2.zero;
jogador.GetComponent<Rigidbody2D>().AddForce(new
Vector2(-300, 300));
Invoke("TextoFimDeJogo", 0.5f);

Tito Petri © 2022 - Todos os Direitos Reservados. 198


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GetComponent<AudioSource>().PlayOneShot(somBate);
}
}

void TextoFimDeJogo()
{
textoMensagem.SetActive(true);
textoMensagem.GetComponent<Text>().text = "FIM DE JOGO";
Invoke("ToqueParaReiniciar", 1.0f);
}

void ToqueParaReiniciar()
{
textoMensagem.GetComponent<Text>().text = "Toque para
reiniciar.";
podeReiniciar = true;
}

void CriaPilares()
{
GameObject pilar = Instantiate(Resources.Load("SET PILARES")
as GameObject);
pilar.transform.position = new Vector3(10.0f, Random.Range(-1.5f,
0.5f), 0);
pilar.GetComponent<Rigidbody2D>().velocity = new Vector2(-2, 0);
Invoke("CriaPilares", Random.Range(2.1f, 5.3f));
}

void CriaSementes()
{

Tito Petri © 2022 - Todos os Direitos Reservados. 199


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

GameObject semente = Instantiate(Resources.Load("SEMENTE")


as GameObject);
semente.transform.position = new Vector3(10.0f,
Random.Range(-1.0f, 1.0f), 0);
Invoke("CriaSementes", Random.Range(5.0f, 10.0f));
semente.GetComponent<Rigidbody2D>().velocity = new
Vector2(-2, 0);
}
}

using UnityEngine;

public class ScriptPassarinho : MonoBehaviour


{
Vector2 forcaImpulso = new Vector2(0, 500);
bool comecou;
bool acabou;

void Start()
{

void Update()
{
bool acabou = GameObject.Find("MEU GAME
ENGINE").GetComponent<ScriptGameEngine>().acabou;
if (Input.GetMouseButtonDown(0) && !acabou)

Tito Petri © 2022 - Todos os Direitos Reservados. 200


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

{
if (!comecou)
{
comecou = true;
GetComponent<Rigidbody2D>().isKinematic = false;
}
GetComponent<Rigidbody2D>().velocity = Vector2.zero;
GetComponent<Rigidbody2D>().AddForce(forcaImpulso);

if (transform.position.y > 3.0f || transform.position.y < -4.0f)


{
if (!acabou)
{
acabou = true;
GameObject.Find("MEU GAME
ENGINE").GetComponent<ScriptGameEngine>().FimDeJogo();
}
}

transform.rotation = Quaternion.Euler(0, 0,
GetComponent<Rigidbody2D>().velocity.y * 3f);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "SEMENTE")
{
Destroy(collision.gameObject);
GameObject.Find("MEU GAME

Tito Petri © 2022 - Todos os Direitos Reservados. 201


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

ENGINE").GetComponent<ScriptGameEngine>().AtualizaScore();
}

if (collision.gameObject.tag == "PILAR")
{
GameObject.Find("MEU GAME
ENGINE").GetComponent<ScriptGameEngine>().FimDeJogo();
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.gameObject.tag == "VAO")
{
GameObject.Find("MEU GAME
ENGINE").GetComponent<ScriptGameEngine>().AtualizaScore();
}
}
}

using UnityEngine;

public class ScriptDestroiObjeto : MonoBehaviour


{

void Update()
{
if (this.gameObject.transform.position.x<-10) {
Destroy(this.gameObject);

Tito Petri © 2022 - Todos os Direitos Reservados. 202


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

}
}
}

Tito Petri © 2022 - Todos os Direitos Reservados. 203


www.titopetri.com.br
Aprenda Programar - Linguagem C#
Copyright © 2022 Tito Petri - Todos os Direitos Reservados.

Parabéns querido aluno por chegar até aqui e ter adquirido mais este
valioso conhecimento!

Se quiser aprender sempre mais sobre criação de Jogos e Aplicativos,


não deixe de conhecer o Aprenda Programar, meu portal de cursos online
onde você pode se especializar em:

● Algoritmos e Lógica de Programação


● Modelagem e Animação 3D
● Criação de Personagens para Jogos e Filmes
● Programação de Aplicativos Nativos para iOS e Android
● Criação de Games 2D, 3D e Realidade Virtual
● Realidade Aumentada e Visão Computacional
● Metodologia STEAM
● Robótica e Impressão 3D

Para virar aluno do Aprenda Programar você deve se inscrever pela


plataforma Hotmart, no link abaixo.

Adquira seu acesso para sempre ao Aprenda Programar:


https://hotmart.com/product/en/aprenda-programar-com-tito-petri

Tito Petri © 2022 - Todos os Direitos Reservados. 204


www.titopetri.com.br

Você também pode gostar