Como criar uma Animação de Cachoeira
() translation by (you can also view the original English article)
Você está preparado para enfrentar outro inimigo perigoso do seu jogo? - Um inimigo? - Sim: o desempenho!
Como discutimos no último artigo, desempenho ruim estraga um bom jogo.
Em dispositivos móveis e na web o desempenho é um grande problema, mas não é o único fator limitante: no passado, computadores e consoles eram menos poderosos que os atuais. Procurando no passado podemos encontrar boas soluções.
Hoje você aprenderá como colocar uma cachoeira no seu jogo sem estragar seu desempenho.
Precisaremos dos seguintes itens:
- Unity 5 (é gratis, baixe agora!)
- Uma textura como essa:



E... pare! É como mágica!
O Efeito de Cachoeira
Confira o vídeo abaixo:
É uma bela cachoeira, não é? Eu adoro ela. Gostaria muito de colocar uma cachoeira assim no meu jogo. Mas como?
Podemos começar com uma tecnica de desconstrução. Perceba: que partes a formam?
- o rio (no topo)
- a cachoeira (vertical)
- O rio (embaixo)
- Um pouco de névoa onde a cachoeira acaba
- Um pouco de respingos onde a cachoeira começa e termina
Podemos compor tudo isso com alguns items sem acabar com o desempenho.
Mas primeiro me deixa explicar...
Porque Não Usar "Água de Verdade" em Dispositivos Móveis?
Em um jogo 3D, a água é composta de componentes (como partículas) que demoram para ser renderizadas. Por isso soluções como essa não são recomendadas para um jogo móvel.
Esse tutorial foi escrito para sugerir uma maneira simples de colocar uma cachoeira em um jogo sem perder quadros.
1. Crie a Primeira Cena
- Abra o Unity
- Crie três planos como no exemplo abaixo
- Crie três materiais com os sombreadores 'Mobile/Particle/Alpha Blended' (chamados Waterfall_bottom, Waterfall_main, Waterfall_top).
- Adicione aos três materiais a textura "waterfal_texture".
2. O Código
- O "núcleo" dessa idéia é usar um Mapa UV Animado.
- Crie um novo script em C♯ (nomeie-o "ScrollUV").
- Dentro, coloque o seguinte código:
1 |
using UnityEngine; |
2 |
using System.Collections; |
3 |
|
4 |
public class Waterfall_UV : MonoBehaviour |
5 |
{
|
6 |
|
7 |
public float WF_speed = 0.75f; |
8 |
|
9 |
public Renderer WF_renderer; |
10 |
|
11 |
void Start() { |
12 |
WF_renderer = GetComponent<Renderer>(); |
13 |
}
|
14 |
|
15 |
void Update() { |
16 |
|
17 |
float TextureOffset = Time.time * WF_speed; |
18 |
WF_renderer.material.SetTextureOffset("_MainTex", new Vector2(0, TextureOffset)); |
19 |
}
|
20 |
|
21 |
}
|
- Salve o arquivo e adicione esse script a todos os planos.
3. Ajuste os Números
Você deve ajustar o ladrilhamento das texturas nos três materiais conforme o tamanho dos planos.
Também, você deve ajustar a velocidade: a velocidade vertical deve ser maior que a dos outros planos.
O efeito final deve estar assim:



E... terminou. Pressione reproduzir e veja o resultado final.
Bônus: Um Sistema de Partículas
Se você quiser adicionar algumas partículas para dar mais um efeito na sua cachoeira, aqui vão umas ideias.
Perceba: as texturas foram feitas no Paint ou algo assim. Elas são muito, muito simples, dessa forma qualquer um pode criar texturas parecidas.
Respingos
Crie uma fonte de partículas nomeada "PS_Spray". Coloque ela no final da cachoeira.
Use os seguintes parâmetros:



Duplique e o mova a cópia para o topo da cachoeira.
Névoa
Crie uma fonte de partículas chamada "PS_steam". Coloque ela na parte de baixo da cachoeira.
Use os seguintes parâmetros:



Bônus 2: Lava
Um truque para criar uma cachoeira de lava: troque a cor da textura assim:



Você talvez irá querer aumentar a quantidade máxima de partículas na névoa. E lembre de tirar as partículas dos respingos.
Conclusão
Algumas vezes a solução rápida é a melhor solução.
Esse tutorial, por exemplo, nasceu no passado, nos anos 90, quando os computadores eram menos poderosos que os atuais e os desenvolvedores tinham que encontrar soluções criativas para contornar suas limitações.
O "truque" de um mapa UV animado é perfeita para diversas situações.
Por exemplo, você pode usá-lo para animar um fundo. Ou, se a textura tem mais ladrilhos (como um "quadro de um desenho"), você pode criar uma pequena sequencia de animação. O único limite é sua imaginação.
Por que é muito importante entender técnicas como essa hoje em dia? Porque sempre, no desenvolvimento de jogos, você vai encontrar barreiras que precisam ser atravessadas. Estudar o passados é, na minha opnnião, a melhor maneira de aprender para o futuro.