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.

Publicado em

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.

Resident Evil, Parasite Eve, Dino Crisis, Evil Dead, Alone in the Dark e Sillent Hill cover
Resident Evil, Parasite Eve, Dino Crisis, Evil Dead, Alone in the Dark e Sillent Hill cover

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.

Box Collider com OnTriggerEnter
Box Collider com OnTriggerEnter

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.

Game Object com posição e rotação para alteração do Transform da câmera
Game Object com posição e rotação para alteração do Transform da câmera

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.

Personagem Resident Evil test
Personagem Resident Evil test

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

Gunnar Correa
Gunnar Correa

Autodidata, Graduado em Desenvolvimento Web, Especialista em Tecnologias na Educação e Pós-graduando em Segurança da Informação. Começou seus estudos na área de programação quando era criança, e atualmente, está estudando desenvolvimento de jogos. Fundador da SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.

Todos os nossos cursos em promoção
Todos os nossos cursos em promoção

Webstories

Todos os nossos cursos em promoção


Deixe um comentário
Aguarde...
Todos os nossos cursos em promoção