質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2004閲覧

Unity オブジェクトの大量生成 エラー

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2018/01/13 12:50

###前提・実現したいこと
パーリンノイズを使って、ブロックを大量生成するオブジェクトを書いたのですが、途中でエラーになってしまいます。エラーが出ないようにするやり方を知りたいです。

###発生している問題・エラーメッセージ

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にするように書いてみましたが、同じエラーが出ました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

メッセージを見ると、どうもマップの生成時点ですべてのコライダーが有効になっているために、マップ生成中にエラーが出てしまっているように見えます。
後でプレイヤーとの距離に応じてコライダーの有効無効を切り替えるのなら、最初はコライダーを全部無効にしておいてもいいかと思うのですが、どうでしょう?

C#

1 // Use this for initialization 2 void Start () { 3 blockPrefab.SetActive(false); 4 blockPrefab.GetComponent<MeshCollider>().enabled = false; // プレハブのコライダーを無効化しておくことで、生成されるインスタンスのコライダーも初期状態では無効になるようにする 5 PlayerObject.transform.position = new Vector3(15, 5, 1); 6 }

投稿2018/01/13 13:49

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/13 17:28

回答ありがとうございます。 プレイヤーとの距離に応じてコライダーの有効無効を切り替えようとしましたが、同じエラーになってしまいました。一気に大量生成するのは止めようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問