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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

Unity

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

Q&A

解決済

1回答

1117閲覧

CSVのステータスを読み込んで敵を動かしたい

Hagiaki

総合スコア6

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

Unity

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

0グッド

0クリップ

投稿2022/01/03 16:04

編集2022/01/03 16:05

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
UnityでCSVファイルに入れた値を読み込んで敵の動きに当てはめるシステムを作っています。
読み込んだ数値を当てはめる機能を実装中に以下のエラーメッセージが発生しました。

発生している問題

String型から数値として使用できる型(intやfloat型)への変換が出来ない

該当のソースコード

CSV

1敵の種類 出現秒数 出現場所x 出現場所y 出現場所z 2UP 10 17 -5 0 3DOWN 20 17 5 0 4

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.IO; 5 6public class SpawnEnemy : MonoBehaviour 7{ 8 private const float spawnRate = 2.0f; 9 private float spawnRealTime = 0; 10 public GameObject enemy; 11 public float dx =17; 12 13 public TextAsset csvFile; 14 List<string[]> csvDatas = new List<string[]>(); 15 16 // Start is called before the first frame update 17 void Start() 18 { 19 string[] lines = csvFile.text.Replace("\r\n", "\n").Split("\n"[0]); 20 foreach (var line in lines){ 21 if (line == "") { continue; } 22 csvDatas.Add(line.Split(',')); 23    } 24 } 25 26 // Update is called once per frame 27 void Update() 28 { 29 spawnRealTime += Time.deltaTime; 30 if (spawnRealTime >= spawnRate) 31 { 32 spawnNewEnemy(); 33 spawnRealTime = 0; 34 } 35 } 36 37 38 void spawnNewEnemy() 39 { 40 41 GameObject newenemy = Instantiate(enemy, new Vector3(dx,0,0), Quaternion.identity); 42 } 43} 44 45

試したこと

int i = int.Parse();
void startに書き込んだこの型にcsvDatasの変数をそのまま入れた
→数値を指定して入れることはできるが読み込んだ数値を纏めて数値化することができない

補足情報(FW/ツールのバージョンなど)

Unity.2020.3.4f
VisualStudio2022

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/01/04 00:43 編集

どうなればいいのか C# のコードの書き方のレベルでもっと詳しく書けませんか? 「敵を動かしたい」というのはどうできるか分かりませんが、C# のコードの書き方レベルで聞いてもらえると答えられる人が多いかと思います。(Unity は知らなくても C# を知っている人は多いので) # 「data」は名詞「datum」の複数形です
YAmaGNZ

2022/01/04 00:45

型がばらばらなら1個づつ変換するのがいいでしょう 1個づつなら出来るって言ってるんだから悩まなくてもいいのではないでしょうか。
guest

回答1

0

ベストアンサー

「敵を動かしたい」という話ではなくて、CSV ファイルのデータをどのような形で取り込むかということを C# のコードでどう書くかの話に限れば、自分なら以下のようにします。

CSV の行の各列のデータを表すのに string 型の配列などは使わないで、以下のクラスを定義して、

public class EnemyPosition { public string Enemy { get; set; } public int Duration { get; set; } public int PositionX { get; set; } public int PositionY { get; set; } public int PositionZ { get; set; } }

CSV データを読んで List<EnemyPosition> 型のオブジェクトにまとめます。以下のような感じ:

var enemyData = new List<EnemyPosition>(); foreach (var line in lines) { var enemy = new EnemyPosition { Enemy = line.Split(',')[0], Duration = int.Parse(line.Split(',')[1]), PositionX = int.Parse(line.Split(',')[2]), PositionY = int.Parse(line.Split(',')[3]), PositionZ = int.Parse(line.Split(',')[4]) }; enemyData.Add(enemy); }

ただ、List<EnemyPosition> 型のオブジェクトが「敵を動かしたい」ということに使いやすいかどうかは分かりません。別の形にしたい場合でも上記コードは参考になるのではないでしょうか。

上の int.Parse メソッドは引数の文字列が int 型に変換できない場合は例外がスローされますが、そのあたりの対応は自分で考えてみてください。

投稿2022/01/04 01:30

編集2022/01/04 01:34
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問