Aula 4: Animações e Triggers

Estruturando o Projeto Unity

Antes de começar a desenvolver um projeto com Unity, uma boa prática é estruturar os diretórios do projeto. Crie as seguintes pastas:

Para criar um Script em C#:

  1. Na pasta Scripts clique com o botão direito, abrirá uma tela. Selecione Create> C# Script.
  2. Digite o nome do Script.

Eventos de Colisão

Métodos utilizados para detecção de colisão em Objetos de cena:

Quando algum objeto colide um outro objeto:

void OnTriggerEnter(Collider obj)

{

    Debug.Log(“Colidiu: ” + obj.name);

}

Quando algum objeto colide e transpassa um outro objeto:

void OnTriggerExit(Collider obj)

{

    Debug.Log(“Colidiu e saiu: ” + obj.name);        

}

Para ativar a colisão de objetos é necessário inserir no GameObject o Componente Collider, podem ser os seguintes tipos de colisões:

Para utilizar o componente collider sem colisão para utilizar em gatilhos, deve-se marcar a opção: Is Trigger

Exemplo:

  1. Selecionar um Objeto
  2. Ir no Inspector e clicar em Add Componet
  3. Selecionar o tipo de Collider

  1. Definir o Collider como Trigger

  1. Criar um Script para ativar o Trigger:

using UnityEngine;

using System.Collections;

public class GatilhoTest : MonoBehaviour {

    void OnTriggerEnter(Collider obj)

    {

        Debug.Log("O objeto " + obj.name + " |ENTROU| no Collider");

    }

    void OnTriggerExit(Collider obj)

    {

        Debug.Log("O objeto " + obj.name + " |SAIU| no Collider");

    }

}

Animações

Todo Objeto que possui animações devem ser configurados. Para configurar os objetos basta seguir os seguintes passos:

  1. Selecione o Objeto original na pasta do projeto. Esse exemplo é o formato .fbx;
  2. No Inspector seleciona a aba Rig
  3. Em Animation Type: Selecione Legacy

  1. Selecione a Aba Animations

C:\Users\CamiloCG\AppData\Local\Microsoft\Windows\INetCache\Content.Word\Captura de tela 2016-06-01 14.28.51.png

  1. Em Clips, pode-se renomear a animação, é possível visualizar o momento em que a animação inicia e termina.
  2. Se seu Modelo possuir mais de uma animação, é possível criar separadamente cada uma. Para isso clique no (+) em Clips. Na linha do tempo abaixo, selecione o início e o fim da animação.
  3. Insira na cena o modelo
  4. Selecione-o, no Inspector, no componente Animation, desmarque a opção Play Automatically

Script para Iniciar a Animação

Para iniciar a animação, pode-se utilizar um script:

using UnityEngine;

using System.Collections;

public class PlayAnimation : MonoBehaviour {

    public void playAnimation()

    {

        GetComponent<Animation>().Play(); //Se tiver apenas uma animação

        GetComponent<Animation>().Play("NomeDaAnimacao"); //Se tiver mais de uma animação

    }

}

Exemplo em Sala de Aula

  1. Crie um projeto Unity
  2. Crie uma Cena
  3. Crie as pastas para estruturar o projeto
  4. Baixe o Modelo, os sons e as ‘Normal Maps’ disponibilizados pelo professor
  5. Coloque os arquivos em suas pastas
  6. Insira na cena: Terreno, o Modelo e um Player

Inserindo Colliders no Modelo

O modelo é separado em 3 partes:

  1. Selecione a parede
  2. No inspector adicione o componente Mesh Collider
  1. Selecione a porta
  2. No inspector adicione o componente Box Collider
  1. Selecione o portal
  2. No inspector adicione o componente Mesh Collider
  3. Continuando no inspector, para que o Player possa abrir a porta é necessário ter um Collider apenas para servir como gatilho. Insira um componente do tipo Box Collider.
  4. Ajuste o Size em Y para 1.
  5. Selecione o Box Collider e marque a opção Is Trigger

Criando os Scripts

Script para Gerenciar a Animação:

Nome: ModelDoor.cs

using UnityEngine;

using System.Collections;

public class ModelDoor: MonoBehaviour {

        public bool open = false;

        public AudioSource audioDoor;

        public AudioClip doorOpenSound;

        public AudioClip doorCloseSound;

        void Start()

        {

        audioDoor = GetComponent<AudioSource>();

        }

        public void OpenDoor()

        {

                if(!open)

                {

                        open = true;

                        GetComponent<Animation>().Play("openDoor");

            audioDoor.PlayOneShot(doorOpenSound);

                        Debug.Log ("Abrindo Porta");

                }        

        }

        public void CloseDoor()

        {

                if(open)

                {

                        open = false;

                        GetComponent<Animation>().Play("closeDoor");

            audioDoor.PlayOneShot(doorCloseSound);

                        Debug.Log ("Fechando Porta");

                }        

        }

}

Script para Abrir a Porta:

Nome: OpenDoor.cs

using UnityEngine;

using System.Collections;

public class OpenDoor : MonoBehaviour {

        public ModelDoor porta;

        void OnTriggerEnter(Collider obj)

        {

                if(obj.name == "Jogador")

                {

                        Debug.Log ("Jogador Triggered Enter");

                        if (!porta.open) {

                                porta.OpenDoor ();        

                        }

                }        

    }

        void OnTriggerExit(Collider obj)

        {

                Debug.Log ("Jogador Triggered Exit");

                if (porta.open) {

                        porta.CloseDoor ();

                }

        }

}

Inserindo os Scripts no Modelo

  1. Selecione o Script ModelDoor.cs e adicione ao modelo.
  2. No componente do Script, selecione o áudio para a caixa Door Open Sound e Door Close Sound

C:\Users\CamiloCG\AppData\Local\Microsoft\Windows\INetCache\Content.Word\Captura de tela 2016-06-01 15.32.14.png

  1. Selecione o Script OpenDoor e adicione ao objeto interno do modelo, Portal
  2. No campo Porta, selecione o modelo que possui o script ModelDoor.