###前提・実現したいこと
パーリンノイズを使って、ブロックを大量生成するオブジェクトを書いたのですが、途中でエラーになってしまいます。エラーが出ないようにするやり方を知りたいです。
###発生している問題・エラーメッセージ
Could not create Collider. You cannot have more than 262143 Colliders enabled in total, including Tree Colliders. Try to disable some Colliders or merge adjacent Colliders together. UnityEngine.GameObject:SetActive(Boolean) CreateMap4:Mapmake() (at Assets/Script/CreateMap4.cs:114) CreateMap4:Update() (at Assets/Script/CreateMap4.cs:74)
###該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class CreateMap4 : MonoBehaviour { 6 7 public GameObject PlayerObject; 8 9 public int change_x = 0; 10 public int change_z = 0; 11 12 [SerializeField] 13 public int groundY; 14 [SerializeField] 15 int maxHeight; 16 [SerializeField] 17 int smoothness; 18 19 // ブロック 20 [SerializeField] 21 GameObject blockPrefab; 22 23 [SerializeField] 24 Transform blockContainer; 25 26 [SerializeField] 27 public int xSize; 28 [SerializeField] 29 public int zSize; 30 31 bool OK = true; 32 bool OK2 = false; 33 bool OK3 = true; 34 bool OK4 = false; 35 bool OK5 = true; 36 37 int name_s = 0; 38 39 // Use this for initialization 40 void Start () { 41 blockPrefab.SetActive(false); 42 PlayerObject.transform.position = new Vector3(15, 5, 1); 43 } 44 45 // Update is called once per frame 46 void Update () { 47 48 if(OK == true) 49 { 50 change_x += 16; 51 name_s += 1; 52 Mapmake(); 53 } 54 55 if (OK3 == true) 56 { 57 if (change_x == 256) 58 { 59 OK = false; 60 OK2 = true; 61 change_x = 0; 62 } 63 } 64 65 if (OK2 == true) 66 { 67 OK3 = false; 68 change_x += 16; 69 if (OK5 == true) 70 { 71 change_z = -16; 72 } 73 name_s += 1; 74 Mapmake(); 75 if (change_x == 256) 76 { 77 OK2 = false; 78 OK4 = true; 79 } 80 } 81 82 if(OK4 == true) 83 { 84 change_x = 0; 85 change_z -= 16; 86 OK2 = true; 87 OK5 = false; 88 OK4 = false; 89 } 90 91 if(change_z == -256) 92 { 93 OK2 = false; 94 } 95 96 } 97 98 void Mapmake() 99 { 100 maxHeight = Random.Range(3, 5); 101 var randX = Random.value * 100000; 102 var randY = Random.value * 100000; 103 for (var x = 0; x <= xSize; x++) 104 { 105 for (var z = 0; z <= zSize; z++) 106 { 107 // パーリンノイズの計算で得られた値を整数にし、地面の高さとする 108 groundY = Mathf.RoundToInt(Mathf.PerlinNoise((float)x / smoothness + randX, (float)z / smoothness + randY) * maxHeight); 109 // groundYの高さまで地面ブロックを積み上げる 110 for (var y = 0; y <= groundY; y++) 111 { 112 var block = Instantiate(blockPrefab); 113 block.name = "Ground" + name_s; 114 block.SetActive(true); 115 block.transform.SetParent(blockContainer); 116 block.transform.localPosition = new Vector3(change_x + x, y, change_z + z); 117 118 } 119 } 120 } 121 } 122 123} 124
###試したこと
プレイヤーとの距離が離れたら、
GetComponent<MeshCollider>().enabled = false;
にして、二点間が一定距離になったらtrueにするように書いてみましたが、同じエラーが出ました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/13 17:28