Unity3D: Efeito para tremer a tela - Unity3D - Artigos - Articles - Fórum

Jump to content

Bem vindo à Unidev
Registre para ter acesso a todos os recursos do site. Uma vez registrado e logado, você poderá criar tópicos, postar em tópicos já existentes, gerenciar seu perfil e muito mais. Se você já tem uma conta, faça login aqui - ou então crie aqui uma conta agora mesmo!
* * * * *
Photo

Unity3D: Efeito para tremer a tela


Em várias situações de seu jogo, você pode querer dar uma incrementada usando recursos visuais para dar ênfase em algo específico durante o desenrolar da ação/jogo.

Bom, o que trago aqui hoje não é nada novo ou mesmo inovador, na verdade trata-se de algo já muito difundido no mundo dos jogos e que eu estava precisando adaptar para meu jogo, então resolvi compartilhar.

Ao ocorrer uma determinada explosão em meu jogo, quero que a câmera fique tremendo por alguns segundos para aprimorar o efeito desejado.

Fiz uma pequena aplicação de teste para demonstrar os passos, que como vocês poderão ver é bem simples e fácil de entender, basta anexar este script/componente à sua câmera e chamar o método Tremer() da classe.

Posted Image

Veja que no exemplo acima eu deixei um botão para testar o efeito, o botão basta você adicionar em qualquer componente (ou nele mesmo ) com :
    void OnGUI ()
    {
        if (GUI.Button(new Rect(10f, 100f, 80f, 30f), "Tremer tela")) camera.GetComponent<CameraPadrao>().Tremer();
    }

Bom, e aqui está o componente:
using UnityEngine;
using System.Collections;

public class CameraPadrao : MonoBehaviour 
{
    public float tremerIntensidade = 0.03f;
    public float tremerVelocidade = 0.007f;
    private float tremerFator;
    private Vector3 posicaoOriginal;
    private Quaternion rotacaoOriginal;

    void Update ()
    {
        if (tremerFator > 0)
        {
            transform.position = posicaoOriginal + Random.insideUnitSphere * tremerFator;
            transform.rotation = new Quaternion(
            rotacaoOriginal.x + Random.Range (-tremerFator,tremerFator) * .2f,
            rotacaoOriginal.y + Random.Range (-tremerFator,tremerFator) * .2f,
            rotacaoOriginal.z + Random.Range (-tremerFator,tremerFator) * .2f,
            rotacaoOriginal.w + Random.Range (-tremerFator,tremerFator) * .2f);
            tremerFator -= tremerVelocidade;
        }
    }
 
   public void Tremer()
   {
        posicaoOriginal = transform.position;
        rotacaoOriginal = transform.rotation;
        tremerFator = tremerIntensidade;// .3f;
   }
}
Basta mudar os valores de tremerIntensidade e tremerVelocidade para suavizar (ou não) o efeito criado.
  • Zaraki and Rock like this



1 Comments

Que gosto nesses artigos apesar de não usar Unity é a lógica de programação que da para ser empregada em outras Enginne