Sistemas de Câmera de Resident Evil 3 no Unity 5

Aprenda a fazer o sistema de câmeras dos jogos pré-renderizados dentro do Unity 5.

Que os jogos de Playstation 1 deixam muita saudade em todos os fãs de bons jogos é fato, agora já pensou em criar um sistema de câmeras de um desses jogos? Pois bem, este é o objetivo deste artigo e videoaula.

O Playstation 1 roda apenas mídias de 700 MB, então para as desenvolvedoras da época era um enorme desafio criar um game com ótimo gráficos, sons, animações entre outros e tudo isso ser inserido dentro de um único disco. Alguns jogos eram distribuídos em dois CDs, como o caso do Evil Dead e Dracula 2.

Jogos como: Resident Evil, Sillent Hill, Parasite Eve, Alone in the Dark, Dino Crisis e Evil Dead, possuíam um gráfico muito bom para a época, incluindo as Cutscenes e trilhas sonoras, mas tudo isso só foi possível graças aos sistemas de câmeras pré-renderizadas, pois os desenvolvedores não perdiam espaços com modelos 3D. Basicamente todo o cenário de fato existiu, e em seguida foi feito uma renderização (salvar a imagem de um ponto de visualização em alta resolução, como um papel de parede) para que posteriormente fosse aplicado em um plano.

Na imagem abaixo vemos vários Game Object com Box Collider, neles estão associados o script CameraColliderPosition, que é o script responsável por acessar o script CameraPosition e informar a rotação e posição para a câmera.

Para fixar nossa câmera em um determinado ponto é muito simples, basicamente precisamos de vários Game Objects espalhados pelo cenário informando a posição e rotação que a câmera deve assumir. Em seguida precisamos de vários Collider para que sirva como chave, eles devem acessar a câmera principal e informar qual posição e rotação correspondente área colidida a cêmera deve-se assumir.

Resumindo, há vários objetos que detectam uma colisão, se houver uma colisão, informamos qual a posição e rotação para a câmera ser alterada.

No Game Object Camera Position, temos associado o script Câmera Position, ele contém um array de sete posições do tipo GameObject. Definimos em cada posição os Game Object vazio que representa a posição e rotação que a câmera deve assumir quando o método setCameraPosition for chamado.

Todo o cenário foi criado dentro do Blender 3D com texturas do CGTexture. A trilha sonora foi obtida em um canal do Youtube, na qual apresenta o Save Game do Resident Evil 2.

Confira nossa aula completa abaixo, se inscreva no canal caso já não seja inscrito e curta o nosso vídeo. :D

CameraColliderPosition

using UnityEngine;
using System.Collections;

public class CameraColliderPosition : MonoBehaviour
{
    public int _pos;
    public GameObject _cameraObject;

    private CameraPosition _cameraPosition;
    void Start()
    {
        _cameraPosition = _cameraObject.GetComponent<CameraPosition>();
    }

    void OnTriggerEnter(Collider _col)
    {
        if (_col.gameObject.tag == "Player")
        {
            _cameraPosition._setCameraPosition(_pos);
        }
    }
}

CameraLook

using UnityEngine;
using System.Collections;

public class CameraLook : MonoBehaviour {

    public GameObject _player;
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
        this.transform.LookAt(_player.transform.position);
	}
}

CameraPosition

using UnityEngine;
using System.Collections;

public class CameraPosition : MonoBehaviour
{

    public GameObject[] _cameraPostion;
    public GameObject _camera;

    public void _setCameraPosition(int _posCameraCurrent)
    {
        _camera.transform.position = _cameraPostion[_posCameraCurrent].transform.position;
       _camera.transform.rotation = _cameraPostion[_posCameraCurrent].transform.rotation;
    }
}

Espero que tenham aprendido, até a próxima! :D