Olá galera! Gostaria de saber se alguém possui um material para estudo sobre sistema de construção por grid. Estou buscando na net mas gostaria de saber da comunidade. É para um projeto pessoal, no mais obrigado pela atenção.
Você pode usar o componente Grid da Unity para alinhar seus objetos em uma grade. Para jogos 3D, lembre-se de configurar Cell Swizzle do Grid para XZY (eixo horizontal no chão), conforme a imagem:
Para usar o componente Grid, você tem que estar com o pacote 2D Tilemap Editor instalado no projeto (você encontra ele no Package Manager, aba de Unity Registry).
Exemplo de Script
O script abaixo permite instanciar um prefab na posição do mouse, encaixando automaticamente na grade:
- Botão direito do mouse → cria um novo prefab para ser posicionado
- Botão esquerdo do mouse → confirma a posição e “fixa” o objeto
using UnityEngine;
public class GridBuild : MonoBehaviour
{
public Grid grid; // Referência ao Grid da cena
public GameObject prefab; // Prefab que será instanciado
private GameObject currentObj; // Objeto sendo posicionado
private Camera mainCam;
void Start()
{
mainCam = Camera.main;
}
void Update()
{
// Botão direito do mouse instancia um novo prefab (pode trocar para outro evento se preferir)
if (Input.GetMouseButtonDown(1))
{
if (currentObj == null)
{
currentObj = Instantiate(prefab);
}
}
// Enquanto tiver um objeto sendo colocado, ele segue o mouse
if (currentObj != null)
{
Vector3 mousePos = Input.mousePosition;
Ray ray = mainCam.ScreenPointToRay(mousePos);
if (Physics.Raycast(ray, out RaycastHit hitInfo))
{
// Pega a posição da célula mais próxima usando o Grid
Vector3Int cellPos = grid.WorldToCell(hitInfo.point);
Vector3 worldPos = grid.GetCellCenterWorld(cellPos);
// Atualiza a posição do objeto
currentObj.transform.position = worldPos;
// Quando o jogador clicar com o botão esquerdo, fixa a posição e libera para um novo
if (Input.GetMouseButtonDown(0))
{
currentObj = null;
}
}
}
}
}