Câmera RTS com a Unity 3D

Gunnar CorreaGunnar Correa30/04/2021 às 20:00:51 - 89 acessos

Câmera RTS com a Unity 3D

Recriamos uma movimentação de câmera como nos clássicos jogos de estratégia em tempo real.


RTS é uma sigla para Real-Time Strategy, que no bom e velho português significa estratégia em tempo real. Esse é um subgénero  que possui renomados jogos, como Age of Empires, Age of Mitology, World of Warcraft, Boswars, entre muitos outros.

Vamos ver aqui como criar uma câmera com a movimentação desse subgénero utilizando o Mouse e também o Teclado do dispositivo.

Vale lembrar que a movimentação pode ter suas complexibilidade dependendo da regra do jogo, como zoom e multiplicação de velocidade, por exemplo.

Para entender o que vamos criar, tudo o que precisamos fazer é verificar a posição do mouse em relação a tela, para isso, observe a imagem abaixo.

Unity 3D RTS Camera

Nossa tela possui 1000px de largura e 500px de altura, é necessário verificar em que posição o mouse se encontra, no exemplo acima, ele deve estar entre a borda cinza escura e a borda azul.

Analisando a tabela abaixo é possível entender as regras.

RegraIntervalo    Descrição
Mouse.X < 250-25Movimenta para a esquerda
Mouse.X > (1000px-25px) 975-100    Movimenta para a direita
Mouse.Y < 250-25Movimenta para cima
Mouse.Y > (500px-25px)475-500Movimenta para baixo

Os valores de 1000px e 500px são obtidos durante a execução do projeto, aqui foram utilizados esses números para exemplificar.

Veja a nossa videoaula para aprender a criar o script e utilizar dentro da Unity 3D.

[Link videoaula]

Código fonte RTS Camera

Agora que você já sabe como criar a sua câmera, confira o código fonte utilizado durante a aula.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RTSCamera : MonoBehaviour
{

    public float borderSize = 25.0f;
    public float velocity = 10.0f;

    private float screenX;
    private float screenY;

    void Start()
    {
        screenX = Screen.width;
        screenY = Screen.height;

        print(screenX);
        print(screenY);
    }

    void Update()
    {
        Vector3 pos = Vector3.zero;

        #region Move X
        //Move para a esquerda
        if (Input.mousePosition.x < borderSize)
        {
            pos.x = -1;
        }

        //Move para a direita
        if (Input.mousePosition.x > (screenX - borderSize))
        {
            pos.x = 1;
        }

        #endregion

        #region Move Y

        //Move para cima
        if (Input.mousePosition.y < 25)
            pos.y = -1;

        //Move para baixo
        if (Input.mousePosition.y > (screenY - borderSize))
            pos.y = 1;

        #endregion

        if (pos == Vector3.zero)
            pos = GetKeyPosition();

        transform.Translate(pos * velocity * Time.deltaTime);
    }

    private Vector3 GetKeyPosition()
    {
        return new Vector3(
            Input.GetAxis("Horizontal"),
            Input.GetAxis("Vertical"),
            0
        );
    }
}

Por hora é isso, até a próxima.


unity unity 3d unity camera unity rts unity rts tutorial unity camera unity movimentação de camera programação de camera camera rts como programar camera de age of empires como programar um jogo aprenda unity

Compartilhe nas redes sociais



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. É CEO do portal SatellaSoft, criado em 2009 com o intuito de compartilhar conhecimento de forma gratuita e inédita.


Fórum

Ficou com alguma dúvida? utilize nosso fórum de perguntas e respostas, lá nossa comunidade poderá te ajudar.

https://forum.satellasoft.com


Aprenda a Planejar seus Jogos

Aprenda a planejar e documentar seus jogos com o eBook criado pela SatellaSoft e nunca mais se perca em seus projetos.

Quero obter a minha cópia.
X