質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3255閲覧

using System.Collections.Generic.List<????> の使い方について

Lemon_0715

総合スコア60

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/06/28 10:06

前提・実現したいこと

2次元構造の配列を使おうと思っているのですが
using System.Collections.Generic.List<????>;
の使い方がわからずエラーになってしまいます。

発生している問題・エラーメッセージ

Assets/GameScripts/StageCreate.cs(4,39): error CS0246: The type or namespace name `List' could not be found. Are you missing `Boo.Lang' using directive?

該当のソースコード

using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Collections.Generic.List<????>; public class StageCreate : MonoBehaviour { const int StageTipSize = 140; int currentTipIndex; // 現在のLv ※ 0~1000mで「0」、1000~2000mで「1」が入るイメージ! public int levei = 0; // Lvごとにプレハブを配列で持つ ※List<List<GameObject>>の方がステージ追加しやすいと思う public List<List<GameObject[]>> stageTips; public Transform character; //public GameObject[] stageTips; public int startTipIndex; public int preInstantiate; public List<List<GameObject>> generatedStageList = new List<GameObject>(); void Start() { //初期化処理 currentTipIndex = startTipIndex - 1; UpdateStage(preInstantiate); } void FixedUpdate() { //キャラクターの位置から現在のステージチップのインデックスを計算します int charaPositionIndex = (int)(character.position.z / StageTipSize); //次のステージチップに入ったらステージの更新処理を行います。 if (charaPositionIndex + preInstantiate > currentTipIndex) { UpdateStage(charaPositionIndex + preInstantiate); } } //指定のインデックスまでのステージチップを生成して、管理下におく void UpdateStage (int toTipIndex) { if (toTipIndex <= currentTipIndex) return; //指定のステージチップまで生成するよ for (int i = currentTipIndex + 1; i <= toTipIndex; i++) { GameObject stageObject = GenerateStage(i); //生成したステージチップを管理リストに追加して、 generatedStageList.Add(stageObject); } //ステージ保持上限になるまで古いステージを削除します。 while (generatedStageList.Count > preInstantiate + 4) DestroyOldestStage(); currentTipIndex = toTipIndex; } //指定のインデックス位置にstageオブジェクトをランダムに生成 GameObject GenerateStage (int tipIndex) { GameObject[] stageTips_Get = stageTips[levei]; int nextStageTip = Random.Range(0, stageTips_Get.Length); GameObject stageObject = (GameObject)Instantiate( stageTips_Get[nextStageTip], new Vector3(0, 0, tipIndex * StageTipSize), Quaternion.identity); return stageObject; } //一番古いステージを削除します void DestroyOldestStage () { GameObject oldStage = generatedStageList[0]; generatedStageList.RemoveAt(0); Destroy(oldStage); } }

試したこと

行き当たりばったりで
TとかListとか入れてみましたが
無理でした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/28 12:33

> using System.Collections.Generic.List<????>; それはいったい何ですか? Unity だとそういうのはアリということなら失礼しました。このコメントはスルーしてください。
guest

回答1

0

ベストアンサー

C#の文法をきちんと勉強しましょう。

とりあえず質問にあるエラーは「The type or namespace name `List'」とあるとおり、「Listなんて名前空間は知らんぞ」という意味です。System.Collections.Generic.List<T>System.Collections.Genericという名前空間に所属するList<T>というクラスです。usingに指定するのは名前空間です。

あんまりたとえ話は理解に間違いが出るかもしれないので避けるべきではありますが……
「隣の家にでかいワンちゃんがいて」というと、言った人の隣の家だということが推測されます。
「友達の家に遊びに行った時のことなんだけど」と前置きをした場合は友達の家のお隣だと推測されますが、前置きがない場合は「友達の家の隣の家に~」と言わないといった人の隣の家だと思ってしまうので相手に伝わりません。
前置き無しで伝えるには長々という必要があるので、省略するために行っておくこの前置きのようなものがusingだと思ってください。

なお、クラス名まで指定する場合もありますが、それはかなり特殊なので、自分で使う分には名前空間を指定するやり方だけでも十分だと思います。他人の作ったソースを見る際には頭の隅においておけばその時に調べるで問題ないかと思います。

質問に書いてあるエラーが解決してもまだまだ文法エラーがあります。
あと、そもそもListは配列ではありません。usingの文法エラーが解決した次に文法エラーになると思われる場所を見るとその認識が原因なのでは?という気がしますので。

MonoBehaviourということからUnityなのだと思いますが、C#の文法をないがしろにしたままコピペでなんか動く/動かないといったところで質問する人をよく見かけます。ですがUnityのC#はC#っぽい独自言語ではなくちゃんと仕様にのっとったC#なので、C#の文法を無視して使うことはできません。つまり、Unityを使うにはUnityの独自機能とC#の両方を学ぶ必要があります。そのため、C#の公式ドキュメントを見て勉強していきましょう。もしもわかりにくいと思ったら++C++; // 未確認飛行 Cなどの解説のあるサイトを一通り見ていくといいかもしれません。ここでわからないという場合は「C#入門」で検索して引っかかったサイトを見たり、入門書の評価の高い本を購入してみるのもいいかもしれません。単に検索したサイトだと間違った情報を書いている場合もありますし、古い本だと版数を重ねていても古い言語仕様に基づいた記述があるなどしていまいちな結果になるかもしれません。
あとは実際に動かして確認が重要です。デバッグ機能で変数の値を確認しながら動かせば理解も深まりやすくなるかと思います。

投稿2020/06/28 12:32

len_souko

総合スコア1363

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lemon_0715

2020/06/28 13:55

コピペにずっと頼っていたので これからはc#をきちんと学ぼうと思います。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問