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.
Animator: https://docs.unity3d.com/ScriptReference/Animator.html
Animation: https://unity3d.com/pt/learn/tutorials/topics/animation
OnTriggerEnter: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerEnter.html
OnTriggerExit: https://docs.unity3d.com/ScriptReference/Collider.OnTriggerExit.html