Ativando portões com Unity 5

Baseado em uma cena de Dino Crisis 2, abaixamos dois portões quando uma alavanca for acionada.

Para aqueles que tiveram um Playstation 1 ou até mesmo um computador por volta dos anos 2000, possivelmente já jogou o game Dino Crisis 2, produzido pela Capcom. Neste artigo você confere nossa aula completa e também os códigos utilizados, onde criamos a mecânica dos portões submersos da 3rd Energy, mais especificamente quando a Regina insere um Plug em um painel. Na figura 1 podemos ver o resultado final da nossa aula.

Figura 1:Portões sendo abaixados.

A mecânica é bem simples, temos três scripts, que são:

Script base alavanca: Serve para detectar a colisão com o player e verificar se ele acionou a alavanca, quando acionado chama a animação da alavanca.

Script alavanca: Ao termino de sua animação, é chamado um método que abaixa os portões, porém o segundo só desce quando o primeiro está na metade da sua animação.

Script portão: Verifica quando acabou a animação do segundo portão para que ative novamente o player e desative a câmera fixa.

 Confira abaixo todos os scripts utilizados na aula.

Alavanca.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Alavanca : MonoBehaviour
{

    public Animator _portao1;
    public Animator _portao2;
    public GameObject[] _cameras = new GameObject[2];

    private int _descer = 0;
    private float _time;

    private void Update()
    {
        if (_descer == 1)
        {
            if (_time >= 2)
            {
                _portao2.SetTrigger("Abrir");
                Destroy(this.GetComponent());
            }
            _time += (1 * Time.deltaTime);
        }
    }

    public void Abrir()
    {
        _cameras[0].SetActive(false);
        _cameras[1].SetActive(true);

        _descer = 1;
        _portao1.SetTrigger("Abrir");
    }
}

 

ControlePortao.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ControlePortao : MonoBehaviour
{

    public bool _abrir;
    public GameObject[] _cameras = new GameObject[2];

    public void HabilitarPlayer()
    {
        if (_abrir)
        {
            _cameras[0].SetActive(true);
            _cameras[1].SetActive(false);
            Destroy(this.GetComponent());
        }
    }
}

 

Portao.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Portao : MonoBehaviour
{

    public string _playerTag = "Player";
    public Animator _alavanca;

   

    private bool _alavancaAcionada;
    private bool _playerColidindo;

    void Start()
    {
        _alavancaAcionada = false;
        _playerColidindo = false;
    }

    void Update()
    {
        if (_playerColidindo && !_alavancaAcionada && Input.GetKey(KeyCode.E))
        {
            _alavanca.SetTrigger("Ligar");
            _alavancaAcionada = true;
        }
    }

    private void OnTriggerEnter(Collider _col)
    {
        if (_col.gameObject.tag == _playerTag)
        {
            _playerColidindo = true;
        }
    }

    private void OnTriggerExit(Collider _col)
    {
        if (_col.gameObject.tag == _playerTag)
        {
            _playerColidindo = false;
        }
    }
}

Confira nossa videoaula completa.

Espero que tenham gostado, até a próxima e não se esqueçam de compartilhar este artigo, senão você será teletransportado para a ilha de Dino Crisis 2.