0 支持
67 閲覧
public スクリプトクラス名[] 変数名; で取得した全てのスクリプトのboolを一気にfalseに変えたいのですが、どうしたら良いのでしょうか。

 <現在>

        for (int i=0;i<スクリプトクラスの変数名.Length;i++)
        {
            スクリプトクラスの変数名[i].boolの変数名 = false;
        }

ってやっているんですけど、
   スクリプトクラスの変数名.『何か』.boolの変数名 = false; 
ってな感じで『全て』を意味する『何か』が入れば一行で済むのではないかと思っています。
有るのか無いのか、有った場合どういう文になるのかを教えてください。
無ければ無いでおねがいします(^^)

初心者 (250 ポイント) | 67 閲覧

ログインまたはユーザー登録してから回答してください。

回答 1

+1 支持

『全て』を意味する『何か』自体はないですが、
Array.ForEachというものを使って全部一気に処理することができます
(プログラムの内部でやっていることはほぼかわりませんが、1行で書けます)

using System;
using UnityEngine;

[System.Serializable]
public class BoolArrayClass
{
    public bool flag;
}

public class ArraySample : MonoBehaviour
{
    public BoolArrayClass[] boolArrayClasses;

    private void Start()
    {
        // boolArrayClassesの全てのflagをtrueにする
        Array.ForEach(boolArrayClasses, x => x.flag = true);
        // boolArrayClassesの全てのflagをfalseにする
        Array.ForEach(boolArrayClasses, x => x.flag = false);
    }
}
一人前回答者 (1.9k ポイント)
0
ご回答ありがとうございます。
例えば2Dアニメーションで『あ、い、う、え、お』とセリフに合わせて口を動かす時に、このような文を書いています。(教えていただいたArray.ForEachを足した後の文です)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System; //←足しました

public class 口の動き2 : MonoBehaviour
{
    int a;
    public GameObject[] kuchi;
    public void Syaberu()
    {
               for(int i = 0; i < kuchi.Length; i++)
        {
            kuchi[i].SetActive(false);
        }
        switch (a = Random.Range(1, kuchi.Length+2))//←ここの"Random"がエラーです
        {
            case 1:
                        for(int i = 0; i < kuchi.Length; i++)
            {
                 kuchi[i].SetActive(false);
             }

                break;
            case 2:
                kuchi[0].SetActive(true);
                break;
            case 3:
                kuchi[1].SetActive(true);
                break;
            case 4:
                kuchi[2].SetActive(true);
                break;
            case 5:
                kuchi[3].SetActive(true);
                break;
            case 6:
                kuchi[4].SetActive(true);
                break;
        }
    }
    public void Damaru()
    {
                for(int i = 0; i < kuchi.Length; i++)
        {
            kuchi[i].SetActive(false);
        }
        Array.ForEach(kuchi, x => x.flag = false);//←ここの"flag"がエラーです
    }
}

ベースは口を閉じた状態の絵が描かれており、セリフが走るとランダムで『あいうえお』の口の一つがSetActive(true)になって、終わると『あいうえお』全部の口をSetActive(false)にして口を閉じた状態に戻すというスクリプトなのですが、説明不足ですみません。("kuchi"の配列には、口の絵、あ~お、の絵のGameObjectが入っております。Syaberu()とDamaru()は外のスクリプトから実行する関数となっております。)

Array.ForEach(kuchi, x => x.flag = false);を足すと"Array"という名前が存在しないとエラーが出て、using System;を足すと"Array"のエラーが消え、上の文のように"flag"と"Random"にエラーが出ました。

何か解決策があれば教えていただけたら幸いです。
+1
このflagは今回サンプルで作ったモノなので、GameObjectの配列なら
`x.SetActive(false);`でOKです

ランダムに関しては
`UnityEngine.Random.Range();`
に変更してください
0
度重なるご回答どうもありがとうございます!
おかげさまで思った通りになりました!
メモして今後活用させていただきます(^^)感謝です!!

関連する質問

0 支持
1 回答
きりぎりす 初心者 (250 ポイント) 6/27 質問 | 52 閲覧
0 支持
0 回答
0 支持
1 回答
0 支持
1 回答
0 支持
0 回答
kumao23 初心者 (220 ポイント) 2 週間 質問 | 21 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

157 質問

153 回答

159 コメント

188 ユーザー