2017-10-04 46 views
0

私は3D点の配列にある小さな半径の小さな球や点をプロットするのが好きです。 PrefabsでSphere GameObjectを使用し、プロットする必要があるときはいつでもインスタンス化しました。私はたくさんプロットしているので、システムは処理できません。Unityの3Dポイントで球や点をプロットする方法は?

私はプロットに必要な方法は、私はそれらを破壊する、それが1から200に変化しているので、だから、システムもそれを扱うことができない

for (int i = 1; i < 200; i++) 
{ 
    for (int j = 0; j < i; j++) 
    { 
     Instantiate(dot, start[j], new Quaternion(0,0,0,0)); 
     GameObject.Destroy(GameObject.FindWithTag("dot"), 0.01f); 
    } 
} 

です。

だから私は

for (int i = 1; i < 200; i++) 
{ 
    for (int j = 0; j < i; j++) 
    { 
     //Here devicePlots.Count is same as i 
     Mesh mesh = new Mesh(); 
     mesh.vertices = devicePlots.ToArray(); 
     Color[] colors = new Color[devicePlots.Count]; 
     int[] indices = new int[devicePlots.Count]; 
     for (int j = 0; j < devicePlots.Count; j++) 
     { 
      indices[j] = j; 
      colors[j] = Color.red; 
     } 
    } 
} 

に変更しかし、何も出て来ません。

私のクエリは です。(1)ゲームオブジェクトのインスタンス化を使用した最初のアプローチが正しいアプローチである場合、システムが処理できるようにする方法。 (2)2番目のアプローチが適切な場合は、なぜドットが表示されないのですか? 私はUnityを初めて利用しています。ありがとう。

+0

システムがそれを処理できないと言ったらどういう意味ですか?何が起こるのですか? – Programmer

+0

プログラムが非常に遅くなり、マウスを動かすことができません。 – batuman

答えて

1

まず、最初のアプローチを見てください。 ここでの主な問題と、システムが計算を処理できない理由(私は時間がかかりすぎることはないと仮定します)は、インスタンス化/破棄(FindWithTag 、参照の保存を開始(Start)に保存し、それから直接読み取るほうがよいでしょう)。

これを最適化するには、その位置を変更するよりも前に、すべてのゲームオブジェクトを作成(インスタンス化)しておく必要があります(editorModeまたはstart)。これは、ポジションを変更するだけで即座に結果を得ることができ、フレーム内で常にインスタンシエート/デストロイを使用するのをやめることができます。

このコードでは、メッシュを作成して頂点を定義していますが、それらを表示するには、三角形と法線を定義しなければなりません。このアプローチを使用したい場合はメッシュの詳細を読むが、これはあなたが望むものを与えるとは思わない。

+0

ありがとうArman。私はドットとSetActive(false)の配列を作った。それからSetActive(true)を作った。一つずつ。 – batuman

関連する問題