Escolar Documentos
Profissional Documentos
Cultura Documentos
Módulo 02 LPG3
Módulo 02 LPG3
Prof. Marcio /
Menezes
LINGUAGEM DE
PROGRAMAÇÃO 2
VOLUME 2
2022
Sumário
INTRODUÇÃO .................................................................................................................................................. 4
CAPÍTULO 1 ..................................................................................................................................................... 4
1.1 Movimentando o fundo da tela. ........................................................................................................... 4
1.2 Passando de uma cena para outra. ..................................................................................................... 8
1.3 Passando parâmetros entre cenas usando PlayerPrefs. ................................................................ 10
1.4 Passando parâmetro entre cenas com variável Static. ................................................................... 12
1.4.1 Classes Estáticas – Static Class ................................................................................................ 13
1.4.2 Membros estáticos de uma classe C# (Static Members) ......................................................... 14
Capítulo 2 – Manipulação de arquivos para Windows. .............................................................................. 15
2.1 Arquivos do tipo texto para Windows ............................................................................................... 15
2.2 Inserindo registro de dados em arquivo padrão ASCII ................................................................... 17
2.2.1 Tela principal. ............................................................................................................................... 17
2.2.2 Script vinculado ao canvas......................................................................................................... 17
2.2.3 Comentários sobre alguns comandos do código. ................................................................... 18
2.2.4 Cálculo automático do valor pago. ............................................................................................ 19
2.2.5 Efetuando a leitura dos dados ................................................................................................... 19
Capítulo 3 – Compilação para Android. ...................................................................................................... 24
3.1 Instalando o SDK ................................................................................................................................. 24
3.2 Instalando o JDK ................................................................................................................................. 27
3.3 Configurando o Build Settings .......................................................................................................... 29
Capítulo 4 – Operações com Imagens......................................................................................................... 31
4.1 Fatiar uma imagem em partes iguais. ............................................................................................... 31
Capítulo 5 – Crazzy Ball ................................................................................................................................ 33
5.1 – Criando o cenário principal. ............................................................................................................ 34
CAPÍTULO 6 – Pirâmide Algébrica............................................................................................................... 35
6.1 – Montando o cenário ......................................................................................................................... 35
CAPÍTULO 7 – Vetores Unidimensionais .................................................................................................... 36
7.1 Algoritmo de ordenação crescente. .................................................................................................. 36
7.2 Ordenar nomes. ................................................................................................................................... 36
7.3 Script .................................................................................................................................................... 37
7.4 Criando um Hanking ........................................................................................................................... 39
7.4.1 Definindo o cenário. .................................................................................................................... 39
7.4.2 – Criando minha biblioteca de classes...................................................................................... 39
7.4.3 – Criando o script principal. ....................................................................................................... 40
Capitulo 8 – Passagem de parâmetro entre Scripts .................................................................................. 43
8.1 – Capturando o objeto da cena anterior ........................................................................................... 43
COORDENAÇÃO TÉCNICA DE INFORMÁTICA - CTINFO
CURSO TÉCNICO DE PROGRAMAÇÃO DE JOGOS DIGITAIS - FAETEC Maio-2023 2
PROGRAMAÇÃO PARA GAMES II Módulo II
Prof. Marcio /
Menezes
INTRODUÇÃO
Na apostila “Programação para Games I” nosso objetivo foi desenvolver um jogo e plataforma
atingindo aproximadamente 80% daquilo que poderíamos dizer o mínimo para o produto em condições de
comercialização, trazendo efeitos sonoros e visuais. Nesta segunda etapa apresentaremos no primeiro
capítulo algumas técnicas de programação para auxiliar em jogos de plataforma e de tabuleiro.
CAPÍTULO 1
Operações relacionadas ao cenário.
Coloque a resolução da sua tela para 16:9, em seguida ajuste “quad” para o tamanho total da mesma.
Selecione a figura que está na pasta sprite e mude a propriedade Wrap Mode para Repeat.
Em Edit / Building Setting mova os cenários na ordem desejada. Considere a posição 0 de cima para
baixo.
Cenário Principal
COORDENAÇÃO TÉCNICA DE INFORMÁTICA - CTINFO
CURSO TÉCNICO DE PROGRAMAÇÃO DE JOGOS DIGITAIS - FAETEC Maio-2023 10
PROGRAMAÇÃO PARA GAMES II Módulo II
Prof. Marcio /
Menezes
Cenário Secundário
Crie um script para o cenário principal. Configure a chamada do projeto conforme o item 1.2. Altere a
propriedade Content type da senha para password
O comando PlayerPrefs é uma classe que armazena as preferências do jogador entre as sessões
do jogo. Ele pode armazenar valores de string, float e integer no registro da plataforma do usuário.
O Unity armazena dados `PlayerPrefs` de forma diferente com base em qual sistema operacional
o aplicativo é executado. Nos caminhos de arquivo fornecidos nesta página, o nome da empresa e o
nome do produto são os nomes que você definiu nas Configurações do Player do Unity.
No cenário Secundário crie um script conforme abaixo.
Não é necessário herdar MonoBehaviour nesse caso, nem anexar o script a um objeto (aliás não
herdando MonoBehaviour nem será possível anexá-lo).
Desta forma, na Cena1 provavelmente você já tenha um script com um método que será
executado ao clicar do botão que realiza a troca para a Cena2. Antes de realizar o carregamento da
Cena2 você pode armazenar suas informações, por exemplo:
Neste caso o arquivo da classe UserData.cs deve estar na mesma pasta do arquivo que utiliza as
variáveis.
Cena 1 Cena 2
Class MyData
Na cena 1 temos um objeto Text, um InputField e um Button. O script CenaSample está vinculado
ao canvas. O InputField está vinculado a variável Usuario.
Na cena 2 temos um objeto Text e um Button. O script Scene2 está vinculado ao canvas. O Text
está vinculado a variável Usuario.
Por este motivo, você pode acessar os membros de uma classe estática apenas usando o nome da
classe.
Por exemplo, vamos supor que criamos uma classe chamada Utilitarios. E ela possui um método
público chamado CalculaAlgo. Você pode chamar este método assim:
Utilitarios.CalculaAlgo();
Mas pra que serve isso? Pra que vou usar uma classe estática?
Podemos utilizar uma classe estática como um repositório de métodos que manipulam apenas
parâmetros de entrada e não precisa ler (get) ou escrever (set) nenhum campo interno.
Foi a técnica usada no item 1.4 para passar o valor de uma variável de uma cena para outra.
https://www.youtube.com/watch?v=rsvkkY3RXSQ
Neste programa iremos inserir um registro de dados em arquivo do tipo texto. O exemplo que iremos
utilizar tem um objetivo didático, para que o aluno perceba que a lógica aplicada em parte de programas
administrativos, também pode ser utilizado em game. Um bom exemplo de estatísticas mensais, melhores
resultados ou até mesmo hanking dos jogadores (item 7.4 Criando um Hanking).
O problema consiste em desenvolver um app que controle as despesas de um veículo e armazene
um arquivo do tipo texto. Dessa forma vamos imaginar que o dono do carro deseja apenas controlar quanto
gasta por mês de combustível, e que seu veículo não é híbrido.
Ao chegar no posto de gasolina, encontra as seguintes informações que ele deve registrar no
programa: Preço por unidade de medida do combustível (litro ou
m3); quantidade de unidades abastecidas (litro ou m3) e valor da
unidade monetária vigente. Para auxiliar nos registros de saída
ele precisa registrar também o valor do odômetro do veículo.
Para saída de informações o programa de apresentar
um relatório mensal que informe o total de km percorridos, o valor
gasto com o abastecimento a média km / unidade de medida do
combustível e a média do preço por unidade de medida do
combustível.
Todos os campos são objetos TextField. Aos botões foram adicionadas imagens.
File.WriteAllText: Cria um novo arquivo, grava em arquivo do tipo texto no caminho especificado e
fecha o arquivo. Se o arquivo de destino já existir, ele será substituído.
Por isso o código criado para caso dele encontrar o arquivo “CarDiary.txt” primeiro lê o seu conteúdo,
depois acrescenta o registro atual, em seguida grava novamente.
COORDENAÇÃO TÉCNICA DE INFORMÁTICA - CTINFO
CURSO TÉCNICO DE PROGRAMAÇÃO DE JOGOS DIGITAIS - FAETEC Maio-2023 18
PROGRAMAÇÃO PARA GAMES II Módulo II
Prof. Marcio /
Menezes
Para que este método seja executa precisamos ativar o evento On End Edit (ao terminar a edição) no campo
InputField de nome IF_PrecoUnitario conforme sequência abaixo.
Na tela de instalação dos componentes do SDK, marque as opções acima do Android 6.0, no mínimo.
Clicar em OK e aguardar toda a instalação. Depois de tudo instalada copie o endereço onde foi
instalado o SDK e coloque no Unity na opção Edit / Preferences
Baixe a versão similar a jdk_1.8.xxxx para trabalhar com Unity 2017.4.15f1. Durante o processo de
instalação copie o local de que está o JDK.
Em Identification defina o Package name com “com.” seguido do nome da empresa mais “.” e nome
do produto. Esta será a identificação na play store da google. Segue abaixo um exemplo de acesso.
https://play.google.com/store/apps/details?id=com.companypersonal.companypersonal
Abra agora a opção Other Settings. Em Version coloque 1.0 ou atualize caso considere que houve
mudança significativa.
Para Bundle Version Code comece com 1. Mas a cada
atualização da mesma versão altere este valor para a google
aceitar a alteração.
Em Minimum API Level aponte para o Android 4.1 “Jelly
Been” (API level 16).
Para Target API Level configure como Automatic.
Em Pulblishing Setting, clicar em Browse Keystore e defina o arquivo de chave para sua aplicação.
Após definir X e Y, observar que as imagens ficaram corretamente divididas, clicar no botão Apply
conforme a tela a seguir.
Se as operações foram realizadas corretamente, ao clicar na seta para a direita da apulheta, dentro
da pasta Sprites, todas as imagens aparecerão fatiadas.
Um cenário simples com efeito sonoro de baixo impacto, mostrando a pontuação adquirida. Com um
toque na tela, o jogo será reinciado.
Modelo para
Armazena
Arquivo de Scripts
Imagens utilizados
para confecção do
cenário.
5.2 Script
7.3 Script
Vamos a explicação. Nas linhas 7 e 8 declaramos as variáveis do tipo Text que recebem os
componentes de tela conforme a tabela do item 7.4.1.
Na linha 9 declaramos as variáveis para receber os InputField’s digitados pelo usuário no “front end”.
Essa leitura pode ser considerada como uma pontuação que fica alterada após o término de uma etapa de
um jogo, por exemplo.
Nas linhas 10 e 11, declaramos os vetores que armazenarão os pontos e os nomes digitados pelo
usuário. Os tamanhos dos vetores são definidos no método Ordenar na linha 44.
Na linha 12, temos o método Start que, como sabemos, é executado apenas no momento em que o
cenário é chamado. Ele apenas executa dois métodos a saber:
1º CriarVariavelRegistro(), que caso a variável de registro PT1 não exista, ele cria as 10 variáveis,
conforme mostra a figura abaixo.
Dessa forma as variáveis só serão criadas a primeira vez que o programa for executado no
equipamento em questão.
2º LerRanking(); efetua a leitura do ranking, que consiste em ler as variáveis de registro que estão
no equipamento e leva-las para a tela. Note que apenas as quatro primeiras, logo ao ser ordenada de forma
decrescente a última não será apresentada.
Neste instante, após a execução do método Start, o programa está aguardando que o usuário digite
valores no campo da pontuação e um nome para ser vinculado ao mesmo, após pressionar o botão
Classificar. A este botão está vinculado no evento OnClick() o método Ordenar.
Neste método temos nas linhas 46 e 47 a definição dos tamanhos dos vetores que armazenam a
pontuação e os nome. Note que o tamanho é 5, e que mostramos apenas 4 na tela.
Nas linhas 48 e 49 grava no registro do sistema os pontos na variável PT5 e o nome NM5. Esses
valores foram retirados da tela, pois conforme a tabela do item 7.4.1, eles estão vinculados aos InputField’s.
Feito isso, entre linhas 51 e 57, armazena nos vetores unidimensionais x e n os pontos e os nomes
respectivamente.
Na linha 59, executa o método MyClass.OrdenarVetor(x, n); que se encontra no arquivo
MyClass.cs. É importante dizer que o mesmo deve estar na pasta que o script OrdenaRanking.cs.
Este método, já mencionado no item 7.4.2, faz a ordenação dos vetores x e n de modo decrescente
baseado no vetor x, ou seja, da maior para menor pontuação trocando também o nome correspondente.
Uma vez o vetor ordenado, executa o método GravarVetor().
Consiste em armazenar nas variáveis de registro, os pontos e nomes dos vetores x e n. Dessa forma
o quinto valor que foi armazenado, oriundo da tela, agora está na posição correta. Caso ele seja o último, não
aparecerá, caso esteja entre os quatro, coloca alguém fora do ranking.
https://www.youtube.com/watch?v=jLncApAmBo8
Altere a propriedade Scale para 0.5 nos três eixos. Posicione o personagem um pouco
afastado do chão em uma das laterais da casa para dar um efeito de pulo ao iniciar o jogo.
Propriedade: Função:
Limite de inclinação Limita o colisor a subir apenas encostas que são menos íngremes
(em graus) do que o valor indicado.
Propriedade: Função:
Distância Mínima de Se o personagem tentar se mover abaixo do valor indicado, ele não
Movimento se moverá. Isso pode ser usado para reduzir o jitter. Na maioria das
situações este valor deve ser deixado em 0.
Vamos declarar três variáveis do tipo Vector3, forward (para frente e traz), strafe (para os lados) e
vertical (para cima ou para baixo caso queira). Linhas 7,8,9.
Nas linhas 11 e 12 declaramos as variáveis do tipo float que definem as velocidades de avanço e
andar para laterais, fowardSpeed e strafeSpeed.
Nas linhas 33 e 34, capturamos no método Update (), a cada frame o valor das teclas W e S para
vertical, e A e D para horizontal. Vale também os controles de setas.
Passo 1
Passo 2
Passo 3
Parâmetros
origem O ponto inicial do raio em coordenadas mundiais.
distância máxima A distância máxima que o raio deve verificar para colisões.
máscara de camada Uma máscara de camada que é usada para ignorar seletivamente Colliders ao
lançar um raio.
Devoluções
bool Retorna true se o raio cruzar com um Collider, caso contrário, false.
Descrição
Lança um raio, do ponto origin, na direção direction, de comprimento maxDistance, contra todos os
colisores na Cena.
Você pode, opcionalmente, fornecer um LayerMask , para filtrar quaisquer Colliders com os quais não esteja
interessado em gerar colisões.
Notas: Raycasts não detectarão Colliders para os quais a origem do Raycast está dentro do Collider. Em
todos esses exemplos, FixedUpdate é usado em vez de Update . Consulte Ordem de execução para
funções de evento para entender a diferença entre Update e FixedUpdate e para ver como eles se
relacionam com consultas de física.
usando UnityEngine;
// Exemplo C#.
// Consulte Ordem de execução para funções de evento para obter informações sobre FixedUpdate
() e Update () relacionadas a consultas de física
void FixedUpdate ()
// Desloca bit o índice da camada (8) para obter uma máscara de bit
// Mas, em vez disso, queremos colidir contra tudo, exceto a camada 8. O operador ~ faz isso,
inverte uma máscara de bits.
layerMask = ~layerMask;
outro
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
Declaração
public static Vector3 MoveTowards ( Vector3 atual ,
Vector3 destino , float maxDistanceDelta );
Parâmetros
atual: A posição a partir da qual se move.
alvo: A posição para a qual se mover.
maxDistanceDelta: Distância a percorrer por chamada current
Devoluções
Vector3 A nova posição.
Calcule uma posição entre os pontos especificados por current e target, movendo-se não mais
do que a distância especificada por maxDistanceDelta.
Use o membro MoveTowards para mover um objeto na posição corrente em direção à posição
destino. Ao atualizar a posição de um objeto a cada quadro usando a posição calculada por esta função,
você pode movê-lo em direção ao alvo suavemente. Controle a velocidade do movimento com o
maxDistanceDeltaparâmetro.
Para garantir que a velocidade do objeto seja independente da taxa de quadros, multiplique o
maxDistanceDeltavalor por Time.deltaTime (ou Time.fixedDeltaTime em um loop FixedUpdate).
Observe que se você definir maxDistanceDelta para um valor negativo, esta função retorna uma
posição na direção oposta do target.
*/
MovePosition
Declaração
public void MovePosition ( posição Vector3 );
Parâmetros
posição Fornece a nova posição para o objeto Rigidbody .
Descrição
Move o Rigidbody cinemático em direção a position.
LookAt
Declaração
public void LookAt ( Transform target , Vector3 worldUp = Vector3.up);
Parâmetros
target Objeto para o qual apontar.
worldUp Vetor especificando a direção ascendente.
Descrição
Gira a transformação para que o vetor de avanço aponte para a posição atual de /target/.
Em seguida, ele gira a transformação para apontar seu vetor de direção para cima na direção
sugerida pelo worldUpvetor. Se você deixar de fora o worldUpparâmetro, a função usará o eixo y do
mundo. O vetor para cima da rotação só corresponderá ao worldUp vetor se a direção para frente for
perpendicular a worldUp.
*/
transform.LookAt(inimigo);
}
}
IA – Arquivo Plataforma.cs
Arquivo vinculado ao objeto Square de nome Plataforma no cenário Main (principal).
IB – Arquivo Spaw.cs
Arquivo vinculado ao GameObject Empty de nome SpawManager no cenário Main (principal).
IC – Arquivo Player.cs
Arquivo vinculado ao objeto Circle de nome Bola no cenário Main (principal).
ID – Arquivo Resultado.cs
Arquivo vinculado ao objeto Canvas de nome Canvas no cenário Secondary (secundário).