Наполеон Бонапарт
Мастер
(1145)
1 месяц назад
1. Получение позиции с помощью Raycast
```csharp
void Update()
{
if (Input.GetMouseButton(0)) // ЛКМ для закрашивания
{
Ray ray = customCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
Vector3 hitPoint = hit.point;
Vector3Int cellPosition = gridLayout.WorldToCell(hitPoint);
PaintCell(cellPosition);
}
}
}
```
2. Метод закрашивания клетки:
```csharp
private void PaintCell(Vector3Int cellPosition)
{
TileBase[] currentTiles = tilemap.GetTilesBlock(new BoundsInt(cellPosition, new Vector3Int(1, 1, 1)));
if (currentTiles[0] == tileBases[TileType.White])
{
tilemap.SetTile(cellPosition, tileBases[TileType.Green]);
}
else
{
tilemap.SetTile(cellPosition, tileBases[TileType.Red]);
}
}
```
3. Обновление метода FollowBuilding:
```csharp
private void FollowBuilding()
{
ClearArea();
temp.area.position = gridLayout.WorldToCell(temp.gameObject.transform.position);
BoundsInt buildingArea = temp.area;
TileBase[] baseArray = GetTilesBlock(buildingArea, Maintilemap);
TileBase[] tileArray = new TileBase[baseArray.Length];
for(int i = 0; i < baseArray.Length; i++)
{
if (baseArray[i] == tileBases[TileType.White])
{
tileArray[i] = tileBases[TileType.Green];
}
else
{
FillTiles(tileArray, TileType.Red);
break;
}
}
tilemap.SetTilesBlock(buildingArea, tileArray);
prevArea = buildingArea;
}
```
Могут быть ошибки,програмирование недавно начал изучать.
https://rutube.ru/video/f7fd1022eb0dea40b8de56007a7e95fc/?r=plemwd . Проблема в том, что у него всё в 2D. Перемещение я поменял на 3D через Raycast.
Переменные и методы: Буду рад если поможете сделать закрашивание клеток в 3D.)