Мега сырая карта с миллиардом спрайтов
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
using UnityEngine;
|
||||
using UnityEngine.Tilemaps;
|
||||
|
||||
public class MapGenerator : MonoBehaviour
|
||||
{
|
||||
[Header("Map Size")]
|
||||
[SerializeField] private int width = 64;
|
||||
[SerializeField] private int height = 64;
|
||||
|
||||
[Header("Map Shape")]
|
||||
[SerializeField] private float shapePower = 2.4f;
|
||||
[SerializeField] private int edgeMargin = 2;
|
||||
|
||||
[Header("References")]
|
||||
[SerializeField] private Tilemap groundTilemap;
|
||||
[SerializeField] private TileBase groundTile;
|
||||
|
||||
[Header("Generation")]
|
||||
[SerializeField] private bool centerMap = true;
|
||||
|
||||
[ContextMenu("Generate Map")]
|
||||
public void GenerateMap()
|
||||
{
|
||||
if (groundTilemap == null)
|
||||
{
|
||||
Debug.LogError("MapGenerator: Ground Tilemap не назначен.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (groundTile == null)
|
||||
{
|
||||
Debug.LogError("MapGenerator: Ground Tile не назначен.");
|
||||
return;
|
||||
}
|
||||
|
||||
groundTilemap.ClearAllTiles();
|
||||
|
||||
int startX = centerMap ? -width / 2 : 0;
|
||||
int startY = centerMap ? -height / 2 : 0;
|
||||
|
||||
float centerX = (width - 1) / 2f;
|
||||
float centerY = (height - 1) / 2f;
|
||||
|
||||
float radiusX = (width / 2f) - edgeMargin;
|
||||
float radiusY = (height / 2f) - edgeMargin;
|
||||
|
||||
for (int x = 0; x < width; x++)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
float normalizedX = (x - centerX) / radiusX;
|
||||
float normalizedY = (y - centerY) / radiusY;
|
||||
|
||||
float shape =
|
||||
Mathf.Pow(Mathf.Abs(normalizedX), shapePower) +
|
||||
Mathf.Pow(Mathf.Abs(normalizedY), shapePower);
|
||||
|
||||
if (shape <= 1f)
|
||||
{
|
||||
Vector3Int position = new Vector3Int(
|
||||
startX + x,
|
||||
startY + y,
|
||||
0
|
||||
);
|
||||
|
||||
groundTilemap.SetTile(position, groundTile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Debug.Log($"Map generated: {width}x{height}");
|
||||
}
|
||||
|
||||
[ContextMenu("Clear Map")]
|
||||
public void ClearMap()
|
||||
{
|
||||
if (groundTilemap != null)
|
||||
{
|
||||
groundTilemap.ClearAllTiles();
|
||||
Debug.Log("Map cleared.");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user