2016-12-31 29 views
0

インスペクタに記入するパブリック配列があり、その配列が空の場合は何かしたいと思います。 その配列が上記のインスペクタ「サイズ= 0」インスペクタの配列が空であるかどうかを確認します

public GameObject[] objects; 

    void CheckArray() 
    { 
     if (objects.Length < 0) // this doesn't work 
     { 
      Debug.Log("Empty!"); 
     } 
     else 
     { 
      Debug.Log("Not Empty"); // this gets logged out 
     } 
    } 

に空では動作しません、私は何か他のものを試してみましたが、また動作しません:

void CheckArray() 
    { 
     if (objects == null) // this doesn't work 
     { 
      Debug.Log("Empty!"); 
     } 
     else 
     { 
      Debug.Log("Not Empty"); // this gets logged out 
     } 
    } 
+0

'objects.Length'が' 0'のとき、デバッグログにはどのような出力がありますか? –

答えて

3

あなたの文if (objects.Length < 0)がある場合違う。

アレイが空の場合は通常0です。それは0あるときは、あなたがチェックしているので、配列の長さ未満0ではなく、配列の長さがある場合0に等しい場合、if (objects.Length < 0)は真ではありません。..

if (objects.Length == 0)またはif (objects.Length <= 0)

EDITする必要があること:

オブジェクトを追加して "objects [0]"をチェックするとオブジェクトが返されるため、これは意味がありません。つまり、 というオブジェクトが1つの配列になります。索引0で編集されましたが、同じ 時間の "長さ"が0の場合は空ですか?

要素があります。私が空白と言うとき、私は編集者からのサイズをに設定しないことを意味しました。 objectsは公開変数なので、エディタはデフォルト値の0を与えます。その0は、私が空配列を言うときの意味です。Debug.Log(objects.Length);0を出力します。

空の配列:

enter image description here

非空の配列:その要素1nullであるか、または何も割り当てられていないにもかかわらず、この場合

enter image description here

Debug.Log(objects.Length); 3を印刷しなければなりませんそれに。 objects.Lengthは、エディタで設定されたサイズと常に等しくなります。

GameObject camera = objects[0]; 
GameObject someObj = objects[1]; //ELEMENT IS NULL 
GameObject dLight = objects[2]; 

個々要素がnullであるかどうかを確認したいですか?

for (int i = 0; i < objects.Length; i++) 
{ 
    if (objects[i] == null) 
    { 
     Debug.Log("Empty!: " + i); 
    } 
    else 
    { 
     Debug.Log("Not Empty: " + i); 
    } 
} 
+0

これはうまくいきましたが、私はオブジェクトを追加して "objects [0]"をチェックするとオブジェクトを返します。つまり、オブジェクトが1つの配列は0でインデックスされます。同時に「長さ0」は空であることを意味しますか? – Abdou023

+0

これに答える答えを変更しました。 'objects.Length'は、何かがスロットに差し込まれているかどうかにかかわらず、エディタで設定された配列サイズの量です。おそらくもっとあなたを混乱させるでしょう。 – Programmer

+1

さて、これははっきりと分かりました。ありがとうございました。 – Abdou023

関連する問題