0

Unity で実行時にリストを更新する方法を誰かが説明してくれませんか?

たとえば、3 つの呪文が含まれている呪文の本があります。それらをアクション バーにドラッグすると、親が再設定されます。私がやろうとしているのは、アクションバー トランスフォームの下にある各子のリストを取得することです。

私の問題は、更新で以下のようなことを試した場合、実際にこのようなことをどこで行うかです。更新はすべてのフレームで実行されるため、そこにあるものは何でも追加されます..

list = actionbarui.GetComponent(UIGrid).GetChildList();

for(var i =0;i < list.size; i++)
    {
    buttonList.Add(list[i].gameObject);
    }

ボタンにコールバックを追加すると、ドラッグ アンド ドロップされるたびに上記のコードが実行され、「呪文」を 1 つだけドラッグすると 1 回ループするように加算的に追加されますが、これは問題ありませんが、別のボタンを追加するとすぐに、ループが 3 回繰り返されます。つまり、既に 1 つある場合は、同じボタンに加えて、ドラッグされたばかりの新しいボタンが合計 3 回追加されます。

コードを次のように変更してみました

list = actionbarui.GetComponent(UIGrid).GetChildList();

for each(var child : Transform in list.GetEnumerator())
    {
    buttonList.Add(child.gameObject);
    }

しかし、この単純なことは何も追加しません。リストがドラッグされたりオンになったりするときにリストを更新し続ける方法がわかりません。これがどのように達成されるかを誰か説明してもらえますか?

2 番目の「リスト」コードは無視してください。これは、NGUI の一部として「BetterLists」を実装しているため、標準のリスト メソッドには従いません。

読んでくれてありがとう

4

2 に答える 2

0

Dover8 の応答の代わりに、追加する子への参照が buttonList に既に含まれているかどうかを最初に確認できます。その場合は、続行します。それ以外の場合は、新しい子を追加します。

ただし、チェックを行う費用がかかり、すでにリストをループしているため、ループを実行する前にリストをクリアするという彼の提案に従うことをお勧めします。おそらく、これらの例から最高のパフォーマンスが得られるでしょう。

buttonList をクリアできない、またはクリアしてはならない理由があり、それでも実行する必要がある場合は、私の提案をお勧めします。それは、あなたがやろうとしていることに対してどの実装が最適に機能するかに大きく依存します。要点は、これを行うにはいくつかの方法があり、それらには考慮する必要があるさまざまなパフォーマンス プロファイルがあるということです。

于 2017-06-01T01:38:22.997 に答える