Escolar Documentos
Profissional Documentos
Cultura Documentos
Multiplataforma para
Jogos
DESENVOLVIMENTO MULTIPLATAFORMA DE JOGOS 1
Desenvolvimento Multiplataforma para Jogos
Aula 1:
Introdução ao Desenvolvimento de Jogos 3D e Matemática Vetorial
para Jogos 3D
Nessa apostila vamos utilizar a engine Unity 3D para entender como essas
engines facilitam o desenvolvimento de jogos e como é a programação de
jogos 3D, ou seja, o que precisamos aprender, qual a linguagem vamos
utilizar e em que partes a programação será importante.
Ciclo de desenvolvimento
Perucia, afirma que o ciclo de desenvolvimento começa com uma reunião
criativa em que as ideias do jogo são expostas e discutidas por todos. Nesse
momento é observado qual ideia tem maior originalidade, inovação, público
alvo, plataforma e possibilidade de mercado. Sendo este último um dos
mais importantes, a não ser que o jogo seja distribuído gratuitamente. São
necessárias diversas dessas reuniões até que se defina um projeto de jogo
para se investir. Escolhido o projeto inicia o processo de game design.
Vetor Nulo
O vetor nulo possui o segmento nulo, ou seja, um vetor que possui seus
componentes zero.
→= (3,4,5)
𝐵
| → | = √𝑥 2 + 𝑦 2 + 𝑧 2
𝐵
| → | = √32 + 42 + 52
𝐵
| → | = √9 + 16 + 25
𝐵
| → | = √9 + 16 + 25
𝐵
| → | = √50
𝐵
| → | = 7.07
𝐵
→
𝐵
y
Figura 3: Versor de um vetor
Por exemplo, se possuirmos um vetor com coordenadas (3.0, 4.0, 5.0), sua
magnitude será 7.07, esse vetor normalizado será (3.0/7.07, 4/7.07,
5/7.07) = (0.42, 0.56, 0.70).
Soma de Vetores
Seja um vetor A (x1, y1, z1) e um vetor B (x2, y2, z2), a soma dos vetores
A e B é o vetor R (x1 + x2, y1+y2, z1+z2). Na Figura 4, pode ser visualizado
a operação de soma de vetores, representados em um plano cartesiano 2D.
Subtração de Vetores
Seja um vetor A (x1, y1, z1) e um vetor B (x2, y2, z2), a soma dos vetores
A e B é o vetor R (x1 - x2, y1 - y2, z1 - z2). Na Figura 5, pode ser visualizado
a operação de soma de vetores, representados em um plano cartesiano 2D.
Aula 2:
Apresentação da Ferramenta e Composição de Cenas 3D
Apresentação da Ferramenta
Interface do Unity 3D
A Engine Unity possui uma interface simples, que facilita o desenvolvimento
de jogos. Sua área de trabalho é dividida em várias janelas chamadas
views, cada uma possui um objetivo especifico. Na Figura 6 a seguir, está
representado cada uma dessas janelas no editor de cenas do Unity 3D.
Além das views, que estão distribuídas na área de trabalho do Unity 3D,
existe a barra de ferramentas que possui as funcionalidades básicas de
manipulação dos elementos e área de trabalho. Na Figura 7, é possível
visualizar a barra de ferramentas:
Composição de Cenas 3D
Neste item, iremos entender como as cenas 3D são compostas no Unity.
Vamos analisar com mais detalhes as Scenes, os GameObjects e os
Componentes com seus atributos.
Depois que alguma das duas opções for escolhida é possível visualizar as
informações da janela de gerenciamento de projetos representada pela
Figura 9.
Depois que escolher o nome do projeto; onde ele será salvo; o modo de
visualização 3D e deixar o analytics como “OFF” é necessário apertar o
botão “Create project”. Na Figura 11, é possível visualizar como é área de
trabalho no layout padrão (Default) do Unity.
Para analisar uma composição de cena 3D, vamos criar uma nova pasta
chamada Scene, na pasta Assets da view Project. Nessa pasta nós iremos
salvar a nossa primeira Cena. Seu nome será “Main”.
Siga os passos adiante para criar a pasta e salvar a cena:
1. Apertar botão direito do mouse na pasta Assets -> Create ->
Folder;
2. Renomear a pasta para Scene;
3. Barra de menus -> File -> Save Scene -> Selecionar a pasta
Scene no seu projeto -> Colocar o nome da cena como Main.
É sempre bom criar pastas dentro da pasta Assets, para subdividir seus
arquivos e não deixá-los todos misturados em uma única pasta. Isso ajuda
na organização e manipulação dos seus arquivos. Por exemplo, você pode
ter uma pasta para seus Sprites, Sons, Musicas, Modelos 3D, Texturas,
Materiais etc.
Para compor nossa cena “Main”, vamos criar um novo GameObject. Para
criar um GameObject você pode acessar o menu GameObject situado na
barra de menus, como pode ser visualizado na Figura 13.
Como é possível observar na Figura 13, você pode criar diversos tipos de
GameObjects na sua cena. Lembrando que os GameObjects serão criados
na cena atual, ou seja, no caso do nosso exemplo a cena “Main”. Ainda
visualizando a Figura 13, é possível observar que é possível criar um
GameObject Vazio (Create Empty), Criar um filho de GameObject Vazio
(Create Empty Child), Criar um tipo de objeto 3D (3D Object), são
geralmente formas trigonométricas (cubos, planos, cilindros), como
também podem ser terrenos. Criar um tipo de objeto 2D (2D Object), Criar
um tipo de Luz (Light), um tipo Áudio (Audio), uma Interface de usuário
(UI), um Sistema de Partículas (Particle System) ou Câmera (Camera).
Todos eles são muito importantes e vamos falar um pouquinho no decorrer
do nosso curso.
Para compor nossa cena, vamos criar um Cubo, que é um tipo de objeto
3D. Para criá-lo, selecione o menu GameObject na barra de menus, 3D
Dessa forma, é possível concluir, que cada projeto terá seus vários
GameObjects distribuídos na janela (view) hierarchy. Se um objeto for
selecionado na janela Hierarchy, todos os seus componentes e atributos
poderão ser visualizados e editados na janela Inspector. Já na janela Scene
poderá ser editado visualmente os objetos da cena.
Aula 3:
Iluminação, Configuração de Materiais e Texturas e Shaders
Iluminação
Como pode ser visualizado na Figura 20, na janela (view) Hierarchy temos
uma câmera principal, um cubo, uma luz pontual e um plane. Também é
possível observar que a luz pontual ilumina apenas uma área da cena,
simulando a luz de uma lâmpada. As propriedades da luz podem ser
visualizadas no componente Light que está na janela Inspector. Lembrando
que os componentes da luz pontual somente vão aparecer na janela
Inspector se a luz pontual estiver selecionada.
Como pode ser visualizado na Figura 23, na janela (view) Hierarchy temos
uma câmera principal, um cubo, uma luz em cone e um plane. Também é
possível observar que a luz em cone ilumina uma área da cena, simulando
a iluminação de uma área em Cone. As propriedades da luz podem ser
DESENVOLVIMENTO MULTIPLATAFORMA DE JOGOS 31
visualizadas no componente Light que está na janela (view) Inspector.
Lembrando que os componentes da luz pontual só vão aparecer na janela
Inspector se a luz pontual estiver selecionada.
Para fazer esse Pré- Calculo é necessário acessar a janela (view) Lighting.
Para acessar essa janela, selecione a barra de menus -> Window ->
Lighting, como pode ser visualizado na Figura 24.
Material
Com o material é possível definir como a superfície de um objeto deve ser
renderizada. Incluindo referências a texturas, informações de tilling, cores
etc. É importante saber que as opções disponíveis para renderização de um
material dependem do Shader utilizado pelo material.
Shaders
São pequenos scripts que possuem os cálculos matemáticos e algoritmos
para determinar a cor de cada pixel do objeto representado, de acordo com
a luz e configuração do material.
Texturas
São imagens. Utilizadas em materiais, para que o Shader determine a cor
da superfície do objeto.
Depois que todas as texturas forem importadas pela Unity, a pasta Textures
irá receber todas as Texturas. Como pode ser visualizado na Figura 30.
Na Figura 30, pode ser observado que todas as texturas estão importadas
dentro da pasta Textures. Você pode encontrar essas texturas de forma
gratuita na internet. O exemplo possui uma textura de aço, de uma grade,
de linhas, de madeira, de metal, de tijolo e de tijolo normalizado. Vamos
entender como aplicar cada uma delas.
Default
o Max Size: Define o tamanho máximo que uma
textura irá possuir dentro do seu jogo. Se colocar
uma textura com valor maior do que esse atributo
o Unity converte para o tamanho máximo.
o Format: Define qual vai ser o formato da textura.
Dependendo do formato você pode consumir menos
espaço em memória.
Criando Material
Para criar um Material, acesse a pasta Assets ou a pasta Materials que
criamos no projeto, elas estão na janela (view) Project. Aperte o botão
direito do mouse -> Create -> Material. Como pode ser visualizado na
Figura 32.
Aula 4:
Programação de Comportamentos Básicos
Criação de Scripts
Com os scripts, é possível criar os seus próprios comportamentos para os
GameObjects. Esses scripts podem ser escritos em C# e UnityScript que é
uma variação do Javascript. No entanto, ambos possuem a mesma
funcionalidade (fornece comportamento aos GameObjects). Nessa
disciplina vamos utilizar a linguagem C#, por possuir a vantagem da
programação Orientada a Objetos.
Geralmente os scripts podem ser criados para criar efeitos visuais, controlar
comportamentos físicos, implementar inteligência artificial e controlar a
movimentação de personagens.
Para criar um Script é necessário acessar a barra de menu -> Assets ->
Create -> C# Script. Assim que o Script for criado, um nome deverá ser
associado a ele.
Estrutura de um Script C#
using UnityEngine;
using System.Collections;
public class Movimentacao : MonoBehaviour {
// Use this for initialization
void Start () {
Existem dois métodos na classe, o método Updade, onde deve ser colocado
todo o código que será executado a cada frame, ou seja a cada atualização
da lógica do jogo. Nesse método é onde é criado os códigos para ações,
entrada do usuário, movimentação do personagem e dos objetos do jogo,
onde é tratado toda a lógica que ocorre durante o jogo. O Outro método é
o Start, esse método é chamado antes do jogo começar ou seja, antes do
método Updade começar a ser chamado. Nesse método deve ter todo tipo
inicialização do jogo.
Translação (Mover)
O Exemplo 2, a seguir, ilustra como uma translação pode ser realizada no
Unity 3D.
using UnityEngine;
using System.Collections;
Na Figura 42, é possível visualizar que o único valor (x,y,z) que atualiza na
propriedade transform do GameObject é o z. Dessa forma o objeto irá
rotacionar apenas no eixo z.
Seguir
Para fazer um GameObject seguir outro GameObject é necessário utilizar a
subtração de vetores e a normalização, para que o perseguidor possua a
direção do alvo. Depois que o GameObject perseguidor obter a direção do
alvo é somente realizar o algoritmo de movimentação em direção ao alvo.
Como pode ser visualizado na Figura 43.
using UnityEngine;
using System.Collections;
Perseguidor
Atirar
No comportamento atirar, iremos aprender a criar projéteis em tempo
de execução e movimentá-los no cenário. Para isso é necessário saber o
conceito de prefabs do Unity 3D.
using UnityEngine;
using System.Collections;
if (Input.GetKeyDown (KeyCode.Space)) {
Rigidbody tiro = Instantiate (prefabTiro,localTiro.trans
form.position,Quaternion.identity) as Rigidbody;
tiro.velocity = this.transform.right * speed;
}
}
}
Exemplo 5: Código GameObject Atirador
Também será criado o Script que será vinculado ao prefab que será o
projétil da bala. Esse Script pode ser visualizado no Exemplo 6 abaixo:
using UnityEngine;
using System.Collections;
void OnBecameInvisible(){
Destroy (this.gameObject);
}
}
Exemplo 6: Código GameObject Tiro
Aula 5:
Formas de Interação
No Unity existem várias formas de se capturar a entrada do usuário, entre
elas estão: teclado, mouse, touch, joystick etc.
No Exemplo 7 abaixo, pode ser visualizado o uso das funções para captura
de eventos do teclado:
using UnityEngine;
using System.Collections;
if(Input.GetKeyDown(KeyCode.Space)){
print ("A tecla espaço foi pressisonada");
}
if(Input.GetKeyUp(KeyCode.Space)){
print ("A tecla espaço foi solta");
}
}
}
Exemplo 7: Uso das funções para captura de eventos do teclado
No Exemplo 8 abaixo, pode ser visualizado o uso das funções para captura
de eventos do mouse:
using UnityEngine;
using System.Collections;
if (Input.GetMouseButton (0)) {
print ("Botão esquerdo está sendo clicado!");
}
DESENVOLVIMENTO MULTIPLATAFORMA DE JOGOS 68
if (Input.GetMouseButtonDown (1)) {
print ("Botão direito clicado!");
}
if (Input.GetMouseButtonUp (2)) {
print ("Botão do meio solto!");
}
}
}
Exemplo 8: Uso das funções para captura de eventos do mouse
Dessa forma um botão pode ser configurado para alguma tecla do teclado,
algum botão do joystick ou botão do mouse.
Colisões
As colisões são muito importantes em um jogo. Com ela é possível verificar
se dois GameObjects entraram em contato. Independente da forma do
GameObject, o que define sua forma são os colisores. Como pode ser
visualizado nas Figuras 56 e 57.
Na Figura 57, é possível visualizar que o unity possui vários tipos de collider,
para revestir o GameObject e detectar a colisão, são seles, Character
Collider, Box Collider, Sphere Collider, Capsule Collider, Mesh Collider,
Wheel Collider e Terrain Collider. Os colliders podem ser adicionados ao
Na Figura 59, é possível visualizar os estados que uma collider pode possuir
no momento de uma colisão.
Para detectar esse tipo de colisão gatilho o Unity 3D fornece três métodos,
são eles: OnTriggerEnter, OnTriggerStay e OnTriggerExit. Eles recebem
como parâmetro um objeto do tipo Collider, que também fornece
informações sobre as colisões, como, por exemplo, direção, velocidade,
com qual objeto ocorreu a colisão, entre outros. No Exemplo 10 é possível
visualizar um exemplo do código para verificação de colisão gatilho.
using UnityEngine;
using System.Collections;
Adicionando Força
void FixedUpdate(){
}
Exemplo 11: Método FixedUpdate
using UnityEngine;
using System.Collections;
void FixedUpdate(){
Vector3 forca = new Vector3 (0,10,0);
using UnityEngine;
using System.Collections;
void FixedUpdate(){
Vector3 torque = new Vector3 (0,10,0);
Controlando Velocidade
Vector3 forca;
public float speed;
// Use this for initialization
void Start () {
forca = new Vector3 (0,100,0);
}
if (Input.GetKeyDown (KeyCode.Space)) {
this.gameObject.GetComponent<Rigidbody> ().AddForce (for
ca);
}
Aula 7:
Programação de Menus
Depois que o GameObject Canvas for criado é necessário criar os botões Start
e Quit. Para criar os botões, selecione o GameObject Canvas e aperte com o
botão direito -> UI -> Button. O botão será criado como GameObject filho do
Canvas, ou seja, irá ser adicionado dentro do Canvas.
DESENVOLVIMENTO MULTIPLATAFORMA DE JOGOS 82
Crie dois botões como GameObject filho de Canvas. Mude seus nomes para
Start e Quit. Como pode ser visualizado na Figura 61.
Mudar o nome
Mude o texto relativo a cada botão. Para isso, expanda o botão na janela (view)
Hierachy selecionando a setinha que está do lado de cada botão. Assim que a
setinha for selecionada será apresentado o GameObject Text. Selecione o
GameObject Text; acesse o componente Text (Script) e mude o nome dos
botões (Start e Quit).
Crie um Script C# na pasta Assets, chamado “GerenciadorBotoes” e cole o
código do Exemplo 15.
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
No Exemplo 15, é possível visualizar que uma nova classe foi importada
usando o using (using UnityEngine.SceneManagement;). A classe
SceneManager, possui a função de gerenciar as cenas e as transições entre
elas. No método botaoStart, a classe SceneManager usa o método
LoadScene para carregar uma nova cena. O método LoadScene possui como
parâmetro o nome da nova cena que será carregada
(SceneManager.LoadScene ("Level1");). No método botaoQuit é chamado o
método Quit da classe Application, que possui o objetivo de finalizar a
aplicação (Application.Quit ();).
Voltando ao nosso projeto, vincule o Script do Exemplo 15 a Main Camera.
Como pode ser visualizado na Figura 62.
Humanoide
o É um modelo 3D que possui uma estrutura parecida com um humano,
ou seja, uma estrutura bípede que possui o corpo, braços, pernas e
cabeça. Como pode ser visualizado na Figura 67.
Rigging
o É processo ou a definição de um esqueleto para um modelo 3D, depois
que o modelo 3D for modelado é necessário criar o seu rigging para que
ele seja animado. O esqueleto de um modelo 3D é criado em um
software especializado em modelagem 3D, como 3DSMax, Blender,
Maya, entre outros. Na Figura 68 é possível visualizar o rigging de um
objeto 3D.
Assim que o botão for clicado, a asset store irá abrir na aplicação do Unity
3D. Assim que abrir no Unity, aperte o botão “Import”. Depois que os
arquivos forem importados no Unity 3D várias pastas irão aparecer na pasta
Assets da janela (view) Project. Como pode ser visualizado na Figura 70.
Para nosso exemplo vamos utilizar o modelo 3D de Teddy, que pode ser
encontrado acessando a pasta Characters -> Teddy. Dentro da pasta é
possível visualizar o modelo 3D de Teddy (Uso). Selecionando o modelo 3D
e visualizando a janela (view) Inspector é possível visualizar as
propriedades do modelo 3D. Como pode ser visualizado na Figura 71.
Referências
BLACKMAN, S. Beginning 3D game development with unity: all-in-one,
multi-platform game development. Apress, 2011.