お世話になっております。
現在、レベル上のアクターに固有のIDを割り当てようとしているのですが
画像のロジックの部分で無限ループが発生してしまいました。
やりたいことは下記の通りです。
- 4桁のIDを作成
- IDをまとめた配列と照らし合わせる
- 既に作成してあるIDだった場合は①に戻る
- 被っていなければ配列に追加
デバッグで確認していて、一つ目のキャラは問題なくIDを設定できているのですが
二つ目(二週目)から無限ループになっているようです。
また、4桁のIDについても被らない値が作成されてはいました。
containsで毎回Trueが返されているようなのですがそこからどう調べようかわからず・・・
よろしくお願いします。
試してみたところ、同じように無限ループになりました。
おそらくText型の変数の性質が原因だと思います。
Textは通常の文字列とは違って、中身をよく調べずに判断する処理になってるようです。
それで多分、同じ変数(TempID2)から代入してる物があるから同じ物、同じ物があるからCONTAINSはtrue、みたいな流れになったんだろうと思います。
何か特別な理由がなければ、TextよりStringの方が普通の文字列として動作するので、わかりやすくなります。
どうしてもText型の配列が必要なら、CONTAINSではなく、ループ処理で1つずつ調べるしかないと思います。
それと質問とは関係ないのですが、ランダムにIDを決めるより、0番から順に1つずつ増やす方が、IDがかぶる心配がないので作りやすいと思います。
※追記
CONSTAINSで同じと判断されてしまう理由のところで、同じ変数(TempID2)から代入してるからだと推測しましたが、どうもその前の"ToString"の段階のようです。
その点についてもう少し詳しく検証した記事を書きました。
後から見る人の参考になるかもしれないのでリンクをはっておきます。
TEXT型のCONSTAINSの不思議な仕様 - 妹でもわかるUnrealEngine4
お早い返信ありがとうございます。
同様にString型にしたところ想定どおりの処理になりました!
型の違いについてまだよくわかっていないので以後気をつけます。
ありがとうございました。
※ランダムIDにしているのは、簡単にいうとID当てゲームのようなものを作ろうとしているからです。にしてももっとシンプルなやり方がありそうですが・・・笑