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.
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.
Regra | Intervalo | Descrição |
---|---|---|
Mouse.X < 25 | 0-25 | Movimenta para a esquerda |
Mouse.X > (1000px-25px) | 975-100 | Movimenta para a direita |
Mouse.Y < 25 | 0-25 | Movimenta para cima |
Mouse.Y > (500px-25px) | 475-500 | Movimenta 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]
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.