やったーできたー(棒)
やっぱり条件間違ってた。
ソースはこんな感じ。
yieldをなんか使いこなせない。
最初Updateの中に突っ込んでて文句言われたし。
using UnityEngine; using System.Collections; public class Main : MonoBehaviour { public GameObject box; private int width = 30; private int height = 30; public Material bl; public Material re; private GameObject[,] boxs; private bool[,] world; private bool[,] buf; // Use this for initialization void Start() { boxs = new GameObject[width, height]; world = new bool[width, height]; buf = new bool[width, height]; for (int x = 0; x < width; x++) { for (int z = 0; z < height; z++) { boxs[x, z] = Instantiate(box); boxs[x, z].transform.position = new Vector3(x, 0, z); if (Random.Range(0, 2) == 0) { world[x, z] = true; boxs[x, z].GetComponent<MeshRenderer>().material = re; } else { world[x, z] = false; boxs[x, z].GetComponent<MeshRenderer>().material = bl; } } } StartCoroutine("celll"); } // Update is called once per frame void Update() { } private IEnumerator celll() { while (true) { yield return new WaitForSeconds(0.1f); cel(); } } //private IEnumerator cel() private void cel() { int count; for (int x = 0; x < width; x++) { for (int z = 0; z < height; z++) { count = 0; for (int px = -1; px <= 1; px++) { for (int pz = -1; pz <= 1; pz++) { if (px == 0 && pz == 0) { } else { int vx = x + px; int vz = z + pz; if (vx < 0) vx = width - 1; if (vx >= width) vx = 0; if (vz < 0) vz = height - 1; if (vz >= height) vz = 0; if (world[vx, vz] == true) count++; } } } switch (count) { case 0: buf[x, z] = false; break; case 1: buf[x, z] = false; break; case 2: buf[x, z] = world[x, z]; break; case 3: buf[x, z] = true; break; case 4: buf[x, z] = false; break; case 5: buf[x, z] = false; break; case 6: buf[x, z] = false; break; case 7: buf[x, z] = false; break; case 8: buf[x, z] = false; break; } } } for (int x = 0; x < width; x++) { for (int z = 0; z < height; z++) { world[x, z] = buf[x, z]; if (world[x, z] == true) { boxs[x, z].GetComponent<MeshRenderer>().material = re; } else { boxs[x, z].GetComponent<MeshRenderer>().material = bl; } } } } }