Avançar para o conteúdo principal

PacMan 3D

Neste artigo vamos fazer um jogo simples, o clássico Pacman em 3D. Para isso vamos utilizar o Unity 3D, claro.

Vamos começar por criar um projeto novo.



O jogo vai começar num menu simples e é por aí que vamos começar. Assim vamos adicionar um botão.

Ao adicionar o botão o Unity adiciona um Canvas. Este elemento configura a visualização do nosso menu pelo utilizador, assim é fundamental posicionar o botão dentro do canvas para que este seja visível.
O passo seguinte é adicionar um ficheiro de código C# e criar a função que vamos associar com o evento clique no botão. Com o botão direito do rato clicar na janela do projeto escolher create C# script.


Abre o ficheiro com duplo clique e insere o seguinte código.

public class Menu : MonoBehaviour {

//function click for the button
    public void button_click()
    {
        SceneManager.LoadScene(1);
    }
}

O ficheiro criado pelo Unity é uma classe derivada da classe MonoBehaviour e que inclui duas funções (Start e Update) que, para este caso, não necessitamos, por isso foram eliminadas.

Agora adicionamos o script criado ao canvas. De seguida selecionamos o botão e configuramos o evento On Click associando ao canvas e depois à função button_click.


Agora que temos o menu pronto vamos guardar a cena com nome menu e adicionar uma cena nova.

Nesta nova cena vamos adicionar um plano para servir de chão e uns cubos para servirem de paredes.

Para cada um destes elementos vamos criar um material. No caso do chão pretendemos utilizar uma textura, assim adicionamos um material novo ao projeto e configuramos de acordo com a imagem.


O campo Albedo tem uma textura adicionada e os campos metallic e smoothness foram alterados para ajustar a textura ao aspeto pretendido. Quanto ao Tiling (repetição da textura) ficou em 5 para X e para Y.

Ao posicionar os elementos é importante controlar as suas coordenadas assim o chão deve ficar em 0,0,0 e os restantes objetos posisionados com o chão como referência.

A cena/nível deve ficar como a seguir se apresenta.


Agora vamos criar o jogador. Para isso vamos utilizar uma esfera e código fornecido pelo Unity, graças ao criador, do Unity.

Vamos a GameObject, o menu, e escolhemos 3D Object e, dentro deste, Sphere.

O código que vamos utilizar faz parte dos Assets do Unity, assim há-que o importar. Em Assets escolher Import Package e depois Characters.

Navegar até à pasta Scripts, dentro de RollerBall, dentro de Characters, dentro de Standar Assets.


Encontra lá dois ficheiros (Ball e BallUserControl) que deve associar à esfera que representará o jogador.

De seguida adicionamos um Rigidbody à esfera, assim.

Um rigidbody é um componente que atribui ao objeto um comportamento em conformidade com as leis da física, como a gravidade.

Neste momento a esfera já deve responder ao input do jogador. Pode ser necessário ajustar algumas propriedades do código da esfera como por exemplo Move Power e também é importar posicionar a câmara para que o nível esteja totalmente visível.

A esfera deve ter uma tag do tipo Player. As tags permitem agrupar os objetos por forma que seja possível aplicar código a um grupo de elementos,

Quem é que vais chamar? Os caça fantasmas! Sim agora temos os fantasmas que vão perseguir o jogador pelo nível.

O fantasma é composto por uma cápsula (capsule) e um ficheiro de código que vamos criar mas o mais importante é o componente que vai permitir ao fantasma percorrer o nível em busca do jogador que é um Nav Mesh Agent. Para que as colisões com o jogador sejam detetadas corretamente adicionamos um Character Controller, sem este elemento não são detetadas colisões quando o jogador não se move.


Agora adicionamos um script novo com o nome GhostScript e vamos inserir o código.

public class ghostScript : MonoBehaviour {

    public GameObject target;   //this is the player or a reference for him
    NavMeshAgent agent;         //this is a reference for the ghost navmeshagent component

// Use this for initialization
void Start () {
        agent = GetComponent<NavMeshAgent>();
        if (target == null)
            target = GameObject.FindGameObjectWithTag("Player");
}

// Update is called once per frame
void Update () {
        //this is for updating the target location
        agent.destination = target.transform.position;
}

    //function to detect when the ghost gets the player
    public void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "Player")
            SceneManager.LoadScene("menu");
    }
}

Para que o componente Nav Mesh Agent funcione é necessário definir o plano do chão como estático e depois na barra Navigation fazer o Bake da informação necessário para o pathfinding do fantasma.


As áreas que são "caminháveis" estão a azul.

Neste momento o fantasma já deve mover-se e perseguir o jogador para onde quer que ele vá. Ao colidir com o jogador o jogo deve apresentar o menu de novo, para isso é necessário definir as cenas que fazem parte do projeto assim é necessário ir a File - Build Settings e adicionar os níveis pretendidos, para isso basta arrasta-los da barra do projeto.



Só falta definir a área que permite passar para o nível seguinte. Para isso vamos adicionar um Empty Game Object e adicionar-lhe um Box Collider definido como trigger, para que seja possível entrar dentro dele. Como se vê na imagem seguinte.


E agora o código.

public class nextLevelScript : MonoBehaviour {

public void OnTriggerEnter(Collider collider)
    {
        if (collider.tag == "Player")
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
    }
}


Este tutorial está disponível em vídeo.



O código do projeto está disponível no GitHub

Comentários

Mensagens populares deste blogue

Upgrade do Windows Home para Pro sem formatar

 Há algum tempo que tentava fazer o upgrade do meu Windows 10 da versão Home para a versão Pro, mas chegava sempre a um ponto em que me era solicitado para formatar o sistema e não estava para isso. Finalmente conseguinte seguindo estes passos: - seguinte estes passos  utilizei uma das chaves genéricas para o Windows 10 Pro e fui a Settings > Update & Security > Activation > Change the product key; - após inserir uma das chaves o Windows instala as funcionalidades Pro e pede para reiniciar; - agora tem o Windows Pro mas não está ativado, assim fui ao site urcdkeys  onde comprei uma chave para o Windows Pro por menos de €20; - com essa chave voltei a funcionalidade Change the product key e ativei o Windows; - e pronto, Windows Pro ativado sem formatar ou reinstalar. Importante : eu não tenho nada a ver com o site urcdkeys por isso a vossa experiência pode correr de forma diferente da minha.

PONG em Flash AS3.0

Mais um pequeno jogo para demonstrar algumas das funcionalidades do AS3.0. Para este exemplo vamos implementar uma versão do Pong. Para este Pong vamos criar a possibilidade de acelerar a bola com a raqueta e, para tornar o jogo mais difícil, quando se atingir uma determinada pontuação fazemos aparecer uma parede no meio do campo de jogo. O código é muito parecido com o jogo do post anterior, mas um pouco mais complicado. Para controlar a nossa raqueta utilizamos a seguinte função: function teclado(e:KeyboardEvent):void{ dir_j1=0; if (e.keyCode == Keyboard.UP){ if(jogador1.y>0) jogador1.y -=5; dir_j1=-5; } if (e.keyCode == Keyboard.DOWN){ if(jogador1.y<370) jogador1.y +=5; dir_j1=5; } } Agora está mais simples pois só percorremos as linhas, ou seja, a coluna nunca muda. A raqueta que é controlada pelo computador depende do seguinte código: function movepc():void { if (bola.y>jogador2.y) jogador2.y = jogador2.y + velocidade_y; if (bola.y<jogador2.y) joga...

React - Introdução

 Neste post vamos fazer uma breve introdução ao React. React é uma framework javascript e por isso é importante ter conhecimentos desta linguagem de programação para melhor compreender o seu funcionamento. O que é necessário? Para construir páginas com React é necessário ter instalado a framework Node e o seu instalador de packages o npm. Com o Node instalado basta abrir uma janela da linha de comandos, eu aconselho utilizar o novo Windows Terminal ou o Cmder . Na sua linha de comando escolhida execute o comando: npx create-react-app Tutorial01 Este comando vai criar uma pasta com o nome Tutorial01 e instalar dos os ficheiros necessários para construir a sua primeira aplicação React dentro dessa pasta. De seguida entramos na pasta criada com o comando: cd Tutorial01 E iniciamos a aplicação com o comando: npm start Deve conseguir ver uma página com o seguinte aspeto: A partir daqui, até fechar a linha de comando, todas as alterações feitas aos ficheiros da sua aplicação são automat...