
Unityについての質問です。
特定のタグをつけた複数のオブジェクト(下記ソースコードでは"Wall"とします)を同時に操作(大きさを変更)したいのですが、下記のコードだとうまく動きません。
具体的には、Wallタグのオブジェクトがシーン中に1つしかない場合は下記のコードでも動作しますが、2つ以上ある場合はいずれも全く動きません。
lang
1public void getReady() 2 { 3 4 GameObject[] walls = GameObject.FindGameObjectsWithTag("Wall"); 5 foreach (GameObject wall in walls) 6 { 7 if (wall.transform.localScale.y < 1.0) 8 { 9 wall.transform.localScale += new Vector3(0, 0.01f, 0); 10 } 11 } 12 }
原因、解決法等ご教示いただければ幸いです。

「全く動かない=大きさが変わらない」ということであってますか?私も試しましたが動きました。動作がわかりやすいよう、足しこむ値を増やしてみては?
ご回答ありがとうございます。動かないというのは、エラーが出るわけではなく大きさが変わらないということです。Wallタグを付けたオブジェクトが複数ある場合だと大きさが変わりません。

壁のオブジェクトのscaleが、1以上になっているということはありませんか?
scaleは1未満にしています。タグの付いたオブジェクトがシーン中に一つだけのときはちゃんと動き、そのオブジェクトをコピーして増やすと動かなくなります。

うーん。オブジェクトが取得できているか確認してみてはどうでしょう。
私の方でも試しましたが単体でも複数オブジェクトでもこのコードでScaleは変化しました。UnityのVersionによる問題か、省略されている他の関数の影響やシーン環境の影響などあるのではないでしょうか。
念のためお伺いしますが、getReady内に「Debug.Log("getReady");」を加えてみると、Wallが複数ある場合はコンソールに「getReady」と表示される(getReady自体はWallが一つでも複数でも実行されている)にもかかわらず、Wallの大きさが変化しなくなってしまう...という状況でしょうか?

あなたの回答
tips
プレビュー


