teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

修正

2021/09/18 13:48

投稿

DaichiSuzuki
DaichiSuzuki

スコア76

answer CHANGED
@@ -6,24 +6,14 @@
6
6
  /// <summary>子要素のアクティブ状態を一括で変更する</summary>
7
7
  public static void ChildObjectSetActive(this Transform transform, bool decision, params string[] exclusion)
8
8
  {
9
- int count = 0;
9
+ for (var i = 0; i < transform.childCount; i++)
10
- while (true)
11
10
  {
11
+ // 除外するものと子オブジェクトの名称が一致しているか比較
12
+ // 一致していなかった場合アクティブ状態を"decision"の値に変更する
12
- try
13
+ if (!exclusion.Contains(transform.GetChild(i).gameObject.name))
13
14
  {
14
- // 除外するものと子オブジェクトの名称が一致しているか比較
15
- // 一致していなかった場合アクティブ状態を"decision"の値に変更する
16
- if (!exclusion.Contains(transform.GetChild(count).gameObject.name))
17
- {
18
- transform.GetChild(count).gameObject.SetActive(decision);
15
+ transform.GetChild(i).gameObject.SetActive(decision);
19
- }
20
16
  }
21
- // 全ての子オブジェクトが検索できたら
22
- catch
23
- {
24
- break;
25
- }
26
- count++;
27
17
  }
28
18
  }
29
19
  ```

1

修正

2021/09/18 13:48

投稿

DaichiSuzuki
DaichiSuzuki

スコア76

answer CHANGED
@@ -1,16 +1,5 @@
1
- 基本的なやり方はそれで合っています。
2
- ただ,それだけだ取得るオブジェクトなかっという時にnullが検知されてしい,それ結果としエラーになってしまいます(子オブジェクト3個しかないそれ以上のオブジェクト検知ようとした時)
1
+ 若干質問内容は違いますがたまたま今自分作っいるゲムで本当同じよう処理を自分作ったで,それを共有ます。
3
2
 
4
- なのでやり方としては,
5
- ①子オブジェクトがnullかどうか判定し,nullじゃなかった場合アクティブをfalseにする(if文)
6
- というやり方と,
7
- ②処理が失敗した場合に何か別の処理をさせる(例外処理)
8
- の2通りのやり方があります。
9
-
10
- とまぁこれだけでも解けるようになると思うのですが,
11
- たまたま今自分が作っているゲームで本当に同じような処理を自分が作ったので,
12
- それを共有します。これに関しては質問はなしで,自分で調べてみてください。
13
-
14
3
  ```C#
15
4
  using System.Linq;
16
5