Trocas de personagens de Obscure 2 com Unity 2017

Gunnar CorreaGunnar Correa19/08/2017 às 05:03:22 - 5.922 acessos

Aprenda a intercalar personagem utilizando o Unity 2017 no estilo do jogo Obscure 2.


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!



Obscure Criando jogo com Unity 2017 programação CSharp Makehuman animação personagem avatar mask animator animator parameters script terceira pessoa

Compartilhe


Gunnar Correa

Gunnar Correa

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



Site atualizado

Olá, nosso site recebeu uma nova atualização e por conta disso, alguns artigos ainda estão sendo atualizados. Dependendo do conteúdo que você procura, poderá encontrar imagens e trechos de códigos mal formatados.

Estamos trabalhando para normalizar todos os conteúdos, muito em breve, esse problema não mais existirá.


Comentários