ObsCure II é um jogo estilo Survival horror desenvolvido pela Hydravision, lançado em 2007 para Playstation 2, Nintendo Wii e PC. Este é o segundo jogo da série Obscure. Em relação ao primeiro game da série, ObsCure 2 possui melhores gráficos, uma quantidade maior de personagens controláveis, maior dificuldade e tempo de duração. O jogo se passa em diversos cenários, como na faculdade de Fallcreek, Hospital, Florestas, entre muitos outros. A trilha sonora do jogo também é muito marcante, principalmente em cenas onde os personagens são psicologicamente abalados por alguma tragédia.
O jogo possui diversos puzzles, em alguns dos casos, eles precisam ser solucionados com personagens específicos, como Hackear uma porta logo no início do jogo com a personagem Mei.
O tempo todo o jogador pode intercalar entre personagens, e em lugares específicos quando toda a turma está reunida, você pode escolher quem fará parte da sua dupla. Cada jogador possui determinadas habilidade, como:
Stan Jones: Sua habilidade é destrancar portas com uma espécie de arame.
Amy Brookes: Está é uma garota muito atraente, mas não se deixe levar por isso, ela é extremamente inteligente e responsável por resolver diversos puzzles durante todo o game.
Shannon Matthews: Após uma contaminação com uma flor, ela possui habilidade de controlar áureas negras, assim liberando passagens para que o jogador possa progredir no game.
Agora que você conheceu um pouco do jogo ou relembrou de quando jogava, confira as duas videoaula abaixo de como recriar esta estrutura.
Parte 1 – Preparando o ambiente
Parte 2 – Trocando os personagens
Confira os scripts utilizados nas videoaula.
Player.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
private Animator _anima;
public GameObject _pontToRaycast = null;
public float _velocidadeRotacao = 10;
public static bool _controlar = true;
private bool _proximoPlayer = false;
private string _playerName = "";
void Start()
{
_anima = this.GetComponent<Animator>();
}
void FixedUpdate()
{
_proximoPlayer = false;
if (_pontToRaycast != null)
{
RaycastHit hit;
if (Physics.Raycast(_pontToRaycast.transform.position, _pontToRaycast.transform.forward, out hit, 3))
{
Vector3 forward = transform.TransformDirection(Vector3.forward) * 10;
Debug.DrawRay(_pontToRaycast.transform.position, forward, Color.red);
if (hit.collider.GetComponent<Player>())
{
_playerName = hit.collider.gameObject.name;
_proximoPlayer = true;
}
}
}
}
void Update()
{
if (_controlar)
{
_anima.SetFloat("Andar", Input.GetAxis("Vertical"));
this.transform.Rotate(0, ((_velocidadeRotacao * Input.GetAxis("Horizontal")) * Time.deltaTime), 0);
if (_proximoPlayer == true && Input.GetKeyDown(KeyCode.Space))
{
PlayerController._playerName = _playerName;
}
}
}
}
PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public GameObject[] _jogadores = new GameObject[4];
public int[] _dupla = new int[2];
public static string _playerName = "";
private int _playerAtual;
private int _indiceAtual = 0;
void Start()
{
_playerAtual = _dupla[0];
AlterarPlayer(_dupla[1]);
}
void Update()
{
if (_playerName != "")
{
int _parceiroPos = TrocarParceiro(_playerName);
if (_parceiroPos >= 0)
{
if (_indiceAtual == 0)
{
_dupla[1] = _parceiroPos;
AlterarPlayer(_dupla[0]);
}
else
{
_dupla[0] = _parceiroPos;
AlterarPlayer(_dupla[1]);
}
}
_playerName = "";
}
if (Input.GetKeyDown(KeyCode.Tab))
{
if (_playerAtual == _dupla[0])
{
_indiceAtual = 1;
_playerAtual = _dupla[1];
AlterarPlayer(_dupla[0]);
}
else
{
_indiceAtual = 0;
_playerAtual = _dupla[0];
AlterarPlayer(_dupla[1]);
}
}
}
private void AlterarPlayer(int _playerAntigo)
{
_jogadores[_playerAntigo].GetComponent<Player>().enabled = false;
_jogadores[_playerAntigo].transform.GetChild(0).gameObject.SetActive(false);
_jogadores[_playerAtual].GetComponent<Player>().enabled = true;
_jogadores[_playerAtual].transform.GetChild(0).gameObject.SetActive(true);
}
private int TrocarParceiro(string name)
{
int _pos = -1;
for (int i = 0; i < _jogadores.Length; i++)
{
if (_jogadores[i].gameObject.name == name)
{
_pos = i;
}
}
return _pos;
}
}
Espero que tenha, gostado, dúvidas, criticas e sugestões são muito bem-vindas!