2017-08-11 6 views
0

は、C#を使用しながら、私はリストを初期化していますは、C#で初期化リストはユニティですでにそれの要素

public List<int> sequence = new List<int>(); 

しかし、私は後にリストを使用しているとき、それは私が予想よりも多くの要素を持っていたことに気づきました。私はそれをデバッグするために、このコードを実行しました:リストはその中に0の要素を使用して作成されなければならないので、私は、出力が0 0 4ことが期待しているだろう

4 
0 
4 

void Start() { 
     Debug.Log(sequence.Count); 
     sequence.Clear(); 
     Debug.Log(sequence.Count); 
     sequence.Add (0); 
     sequence.Add (1); 
     sequence.Add (2); 
     sequence.Add (3); 
     Debug.Log(sequence.Count); 
} 

は、これはの出力を与えました。

私はうまくいきませんでしたが、リストは4つの要素で作成されています。

まず、誰もこれをまったく再現できますか?そして、第二に、なぜこれが起こっているのかを誰でも理解できます(それは十分に簡単にsequence.Clear()で解決できます)。

ありがとうございます!

+0

あなたはリストを消去した後に4つの要素を追加しています。このアクションの後、Countから何を得ることが期待されますか? – Steve

+0

申し訳ありませんが、より明確にすべきでした。リストは0個の要素で作成する必要があるので、出力は「0 0 4」と期待しています。 – JThistle

+0

@RenéVogtいいえ、ユニティでは、(そのクラスの他のメソッドによってアクセスできる)クラスのグローバル変数は、それらのメソッドの範囲外で宣言されなければなりません。したがって、宣言はStartメソッドの前後で行われます。 – JThistle

答えて

0

何らかの理由で、リストの要素数がインスペクタで4に設定されていました。助けをいただき、ありがとうございました。

1

Unity3Dでは、シリアライズ可能なパブリックフィールドは、フィールドの宣言の前に[SerializeField]アトリビュートを置くのと同じです。このフィールドが別のシリアライズ可能なクラス(通常MonoBehaviour)の一部である場合、Unityはその値をオブジェクトに格納します。値はエディタで保存され(ゲームが実行されていないとき)、ディスクに保存され、プロジェクトを開くたびに再度読み込まれます。シーン内でオブジェクトをインスタンス化すると、そのオブジェクトにはpublic/serialized変数のコピーもあります。

このオブジェクトの値が指定されているかどうかを確認するには、そのオブジェクトがエディタに属するMonoBehaviourを探します。スクリプトを探してはいけません。 GameObjectを探してください。インスペクタにsequenceが表示されているところまで下にスクロールします。値が指定されていますか?その場合、スクリプト(コンポーネント)を含むオブジェクトがインスタンス化された後に、それらの値が常に存在します。

関連する問題