Skip to content

Commit

Permalink
Merge pull request #7 from Lizdtre/Inimigos-e-UI
Browse files Browse the repository at this point in the history
Inimigos e UI
  • Loading branch information
Laisczt authored Aug 20, 2023
2 parents 6207f71 + 07d3dba commit d842a16
Show file tree
Hide file tree
Showing 46 changed files with 12,308 additions and 10,850 deletions.
15 changes: 6 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,14 @@ Disponivel [aqui](./glossario.md)

# [Tutoriais](./tutoriais#tutoriais)

[Configuração do ambiente(Unity e IDE)](./tutoriais/Ambiente.md)
- [Configuração do ambiente(Unity e IDE)](./tutoriais/Ambiente.md)

[Criação do primeiro nível](./tutoriais/primeiroNivel.md)
- [Criação do primeiro nível](./tutoriais/primeiroNivel.md)

[Adicionar moedas](../adiciona-moedas/tutoriais)

[Variação de inimigos](../variacao_inimigos/tutoriais)

[Adicionar música](../adicionando_musica/tutoriais)

[Animação de pulo](../animacao-pulo/tutoriais)
- [Movimento do jogador](./tutoriais/movimentoPlayer.md)

- [Desenvolvimento do nível](./tutoriais/Desenvolvendo%20Nível.md)

- [Inimigos e UI](./tutoriais/InimigosUI.md)

# Como contribuir
8 changes: 6 additions & 2 deletions glossario.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,12 @@
Se precisar fazer o seu, de uma olhadinha aqui: [Como (e quando) criar um GDD: formatos, dicas e exemplos práticos.](https://producaodejogos.com/gdd/)

## H
* __hud__: Sigla em inglês para “Heads up Display”. Refere a todas informações na tela do jogo que auxiliam o jogador, como menus, mapas, barras de energia, tempo etc.

* __hitbox__: Um formato invisível utilizado para detectar colisões entre objetos.

* __hp__: Sigla em inglês para "Health Points", é uma representação numérica da saúde(vida) do personagem, geralmente mostrada como o número, uma barra ou ambos. Atingir 0 de HP costuma resultar em um morte

* __hud__: Sigla em inglês para “Heads up Display”. Refere a todas informações na tela do jogo que auxiliam o jogador, como mapas, barras de vida, tempo etc.

## I

## J
Expand Down Expand Up @@ -59,6 +62,7 @@
## T

## U
* __ui__: Sigla em inglês para "User Interface", são menus e informações que existem fora do "universo" do jogo, e só aparecem para o jogador, inclui o HUD e outras coisas como o menu principal, tela de pausa, legendas, etc.

## V

Expand Down
5 changes: 4 additions & 1 deletion tutoriais/Desenvolvendo Nível.md
Original file line number Diff line number Diff line change
Expand Up @@ -144,8 +144,11 @@ Para detectar que tocamos na moeda, o Unity possui um método (Assim como Start(
Até agora, o nosso jogador tem a capacidade de fazer um único pulo... mas poderiamos ter mais possibilidades de design de nível se o jogador tivesse um pulo duplo.
Podemos também, caso desejarmos, impedir que o jogador faça "wall jump", fazendo com que os pulos só resetem quando o jogador pisar no chão.

Antes disso, podemos também impedir que o jogador gire marcando a seguinte caixa em seu RigidBody2D

### Chão reset
![Freeze Rotation](https://cdn.discordapp.com/attachments/1105270961391030293/1142611945812414494/image.png)
### Resetar pulo somente no chão
- Para fazer o reset pelo chão vamos fazer o sequinte código:

```C#
Expand Down
156 changes: 156 additions & 0 deletions tutoriais/InimigosUI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
# Inimigos e UI

## Inimigos
Vamos adicionar uma ameaça ao nosso jogo na forma de um inimigo que fica andando de um lado para o outro

1. Crie um novo objeto e dê o sprite que quiser
2. Adicione um Collider2D e customize o formato

![Inimigo com collider](https://cdn.discordapp.com/attachments/1105270961391030293/1141479279109079193/image.png)

Queremos que esse inimigo fique andando de um lado para o outro, se movendo até uma posição expecífica e trocando de direção

3. Crie um novo script de movimentação para seu inimigo
4. Insira o seguinte código dentro de Update() (e defina a variável speed no início da classe)
```C#
update()
{
transform.position += Vector3.right * speed;
}
```
Sabemos que isso fará o inimigo se deslocar para a direita infinitamente
5. Para definir os limites do seu movimento, crie as seguintes variáveis no início da classe

```C#
public Vector3 startPosition;
public Vector3 endPosition;
private int direction = 1;
```

E adicione este código em Update()
```C#
Update()
{
transform.position += Vector3.right * speed * direction;

if (Vector3.Distance(transform.position, startPosition) <= 0.1f) // if acontece quando o inimigo está dentro de 0.1 unidades de distância da posição final
{
direction = 1; // Direção = direita
}

if (Vector3.Distance(transform.position, endPosition) <= 0.1f) // if acontece quando o inimigo está dentro de 0.1 unidades de distância da posição final
{
direction = -1; // Direção = esquerda
}
}
```

Note que simplesmente fazer "transform.position == endPosition" não vai funcionar devido as posições serem floats, é possível que o inimigo ultrapasse a posição final sem que a condição se torne verdadeira


### Prefabs
Agora que temos nosso objeto inimigo criado, podemos querer ter varios inimigos idênticos espalhados pela fase, todos com as mesmas propriedades.

Podemos fazer isso simplesmente copiando e colando o inimigo por ai, mas uma forma muito mais prática é tornar o inimigo em um prefab(pre-fabricated object), um inimigo pronto que podemos adicionar à fase sempre que precisarmos.

Outra vantagem de prefabs é que alterações ao prefab se aplicam a todas as suas instâncias na fase, ou seja, podemos, por exemplo, mudar o sprite do inimigo alterando somente o prefab, sem ter que achar todos os inimigos no nível e alterar seus sprites individualmente(também é possivel modificar instâncias expecíficas de prefabs).

1. Para fazer isso, simplesmente arraste seu objeto inimigo da Hierarchy para o local desejado na janela Project

Se tudo der certo, o inimigo irá aparecer dentre os seus arquivos e o inimigo já existente ficará com texto azul

![Criação de prefab](https://cdn.discordapp.com/attachments/1105270961391030293/1141494091641798718/image.png)
## Dano
Precisamos que os inimigos interajam com o jogador de alguma forma, a mais clássica sendo que eles dêem reduzam a vida do jogador

1. Vamos primeiro adicionar HP ao script do jogador
```C#
public float playerHealth = 100.0f;
```

Agora queremos detectar quando o jogador colide, expecificamente, com um inimigo.

Para isso, precisamos definir o que é um inimigo

2. No inspector do inimigo, atribua a ele uma tag (pode ser a tag "Enemy" existente ou uma nova)
![Seletor de tags](https://media.discordapp.net/attachments/1105270961391030293/1142572597205291078/image.png?width=316&height=360)
3. No script do jogador, adicione o seguinte código dentro de OnCollisionEnter()
```C#
private void OnCollisionEnter2D(Collision2D other)
{
if (other.contacts[0].normal == Vector2.up)
{
currentJumps = 0;

//isJumping = false;
}

if (other.gameObject.CompareTag("Enemy"))
{

playerHealth -= 20;
Debug.Log("OUCH " + playerHealth);
}
}
```
Colidir com o inimigo reduzira a vida do jogador em 20 e escrevera uma mensagem no console com sua vida atual.

## UI
Não basta apenas exibir a vida do jogador no console, pois essa ferramenta só está disponível para nós desenvolvedores. Para que o player seja capaz de ver sua própria vida, precisamos adicionar um HUD

1. Crie um novo objeto UI > Canvas.
2. Dê um clique duplo nesse novo objeto. Este vai ser o lugar onde você ira criar sua UI

![Canvas](https://media.discordapp.net/attachments/1105270961391030293/1142578845283799172/image.png?width=648&height=386)
Não se alarme pelo tamanho do canvas, não é necessário reduzí-lo

3. Dentro do seu objeto canvas, crie um novo objeto UI > Text
4. Edite o texto como quiser, a posição do texto no canvas equivalerá a sua posição na tela do jogador
![texto no canvas](https://media.discordapp.net/attachments/1105270961391030293/1142580437840056490/image.png?width=1013&height=527)
(Mudar as opções de Overflow vertical e horizontal para "overflow" pode facilitar)

![ui no jogo](https://cdn.discordapp.com/attachments/1105270961391030293/1142581361811660860/image.png)

5. Dentro do script do jogador, nas primeiras linhas, insira o seguinte código
```C#
using UnityEngine.UI;
```

6. Declare a seguinte variável pública
```C#
public Text playerHealtText;
```

(Defina essa variável no editor arrastando o objeto texto até a caixinha no script do jogador)

7. Dentro de if em OnCollisionEnter(), faça a seguinte alteração (dentro do segundo 'if')
```C#
private void OnCollisionEnter2D(Collision2D other)
{
if (other.contacts[0].normal == Vector2.up)
{
currentJumps = 0;

//isJumping = false;
}

if (other.gameObject.CompareTag("Enemy"))
{

playerHealth -= 20;
Debug.Log("OUCH " + playerHealth);
playerHealtText.text = ("HP: " + playerHealth);

}
}
```

Agora a vida no HUD irá atualizar sempre que o player tomar dano! (mas note que nada a impede de ficar negativa)

![GIF inimigos dando dano e HUD](https://cdn.discordapp.com/attachments/1105270961391030293/1142607917581869206/level.gif)
17 changes: 15 additions & 2 deletions tutoriais/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
# Tutoriais

Nessa pasta vamos disponibilizar os tutoriais em texto .
Cada tutorial possuirá uma entrada, que são os arquivos e estados a partir dos quais o tutorial se inicia; e uma saída, que é o que foi produzido.
Cada tutorial possuirá uma entrada, que é o ponto de partida do tutorial; e uma saída, que é o que foi produzido.
Cada tutorial vai então especificar arquivos de cena, materiais, prefabs e/ou scripts necessários.

[Como usar as entradas/saídas](./)
[Como usar as entradas/saídas](./) A FAZER

Termos e expressões de programação/gamedev usados podem ser vistos no [Glossário](../glossario.md)

## [Configuração do Ambiente](./Ambiente.md)
- Download e instalação do Unity
Expand Down Expand Up @@ -55,4 +57,15 @@ Cada tutorial vai então especificar arquivos de cena, materiais, prefabs e/ou s
### Saída
- [Parte III](https://github.com/Lizdtre/unity-for-women/tree/master/workshop/Assets/Part%20III)

## [Inimigos e UI](./InimigosUI.md)
- Criação de um inimigo
- Rota de Patrulha (anda de um lado pro outro)
- Dá dano ao jogador
- UI com vida
- Uso de prefabs

### Entrada
- [Parte III](https://github.com/Lizdtre/unity-for-women/tree/master/workshop/Assets/Part%20III)

### Saída
- [Parte IV](https://github.com/Lizdtre/unity-for-women/tree/master/workshop/Assets/Part%20IV)
Loading

0 comments on commit d842a16

Please sign in to comment.