// GDnD wiki example // Demonstrates: Game of Life grid stepping in Unity 2D // Related pages: [[cellular-automata]], [[overview-unity-nature-of-code-examples]] using UnityEngine; public class GameOfLifeGrid : MonoBehaviour { [SerializeField] private int width = 64; [SerializeField] private int height = 64; [SerializeField, Range(0f, 1f)] private float aliveChance = 0.45f; private bool[,] current; private bool[,] next; public int Width => width; public int Height => height; public bool[,] Current => current; private void Awake() { current = new bool[width, height]; next = new bool[width, height]; Randomise(); } public void Randomise() { for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) current[x, y] = Random.value < aliveChance; } public void Step() { for (int x = 0; x < width; x++) for (int y = 0; y < height; y++) { int neighbours = CountNeighbours(x, y); bool alive = current[x, y]; next[x, y] = alive ? neighbours == 2 || neighbours == 3 : neighbours == 3; } (current, next) = (next, current); } private int CountNeighbours(int x, int y) { int sum = 0; for (int dx = -1; dx <= 1; dx++) for (int dy = -1; dy <= 1; dy++) { if (dx == 0 && dy == 0) continue; int nx = (x + dx + width) % width; int ny = (y + dy + height) % height; if (current[nx, ny]) sum++; } return sum; } }