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

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

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

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

C#

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

Unity

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

Q&A

解決済

2回答

2064閲覧

UnityでCSV読み取りプログラムでエラーが出てしまいます。

Avent

総合スコア47

CSV

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

C#

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

Unity

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

0グッド

0クリップ

投稿2017/09/06 08:12

編集2017/09/06 08:20

###前提・実現したいこと
プログラム初心者です。
Unityにて、csvを読み取ってテキストに反映させるプログラムを作りたいと思っているのですが、エラーが出てきてしまいます。
エラーの内容もよくわからなく、どうすればいいかわかりません。
解決方法をご教授ください。

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

NullReferenceException: Object reference not set to an instance of an object ScoreManager.LoadCSV () (at Assets/Scripts/ScoreManager.cs:29) ScoreManager.Start () (at Assets/Scripts/ScoreManager.cs:16)

###該当のソースコード

c#

1using System.Collections; 2using System.IO; 3using System; 4using UnityEngine.UI; 5using UnityEngine; 6 7public class ScoreManager : MonoBehaviour { 8 9 public Text[] _Name; 10 public Text[] _Score; 11 public string filePass; 12 13 // Use this for initialization 14 void Start () { 15 LoadCSV (); 16 17 } 18 19 // Update is called once per frame 20 void Update () { 21 22 } 23 24 void LoadCSV () { 25 int i = 0, j; 26 TextAsset csv = Resources.Load (filePass) as TextAsset; 27 Debug.Log (filePass); 28 StringReader reader = new StringReader (csv.text);//←ココ 29 while (reader.Peek () > -1) { 30 31 string line = reader.ReadLine (); 32 string[] values = line.Split (','); 33 _Name [i].text = (values [0]); 34 _Score [i].text = (values [1]); 35 Debug.Log ("i = " + i); 36 i++; 37 38 } 39 40 } 41 42}

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

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

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

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

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

guest

回答2

0

ベストアンサー

> StringReader reader = new StringReader (csv.text);//←ココ

で NullReferenceException が出るのなら原因は csv.text の csv が
null なのに .text という参照をしようとしているからと考えるのが自然な気がします。
csv が null になっているのなら

> TextAsset csv = Resources.Load (filePass) as TextAsset;

の結果が null だからという事になります。
となると

・filePass で指定されたファイルが存在しない(読めない)
※場所(パス)が違うとかも含めて再確認してください

・filePass で読んだけど TextAsset にキャストできなかった
※読んだ filePass のファイルが TextAsset ではなかったとか

などが原因として考えられます。
このソースだけではわかりませんが、例えば filePass が null とかいうオチとかも
あるかもしれません。
恐らく ScoreManager が何かの GameObject にアタッチされた状態で
filePass も UnityEditor の Inspector 画面で何かしらが設定してある
…という想定なのかもしれませんがそこが本当にそういう使われ方をしているかは
ここにある情報だけでは判断できません。

(おまけ)
coco_bauer さんが Resources の初期化云々書かれてますが Resources.Load() は static なので使い方としてはこれで合ってるんじゃないでしょうか…何か勘違いしてたらごめんなさい

投稿2017/09/06 08:42

HiroshiWatanabe

総合スコア2160

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

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

Avent

2017/09/06 09:05

解決しました!ありがとうございました。 csv読み込みのプログラムはネットのものを参考にしたのですが、どうやらResourcesの中のfilePassを書かなければいけないようでした。 csvファイルをResouecesの中に入れることで解決しました。
guest

0

初期化がされていない変数(Resources)のメソッド(Load)を呼び出そうとしているので、「NullReferenceException: Object reference not set to an instance of an object」という例外が発生したのです。

質問のコードに、変数Resourcesは1回しか出現していません。
そこでLoadメソッドを呼び出すようになっていますが、Resourcesは初期化(本来であれば、Loadメソッドを持つクラスのオブジェクトが入っているはず)されていないからエラーになります。

TextAsset csv = Resources.Load (filePass) as TextAsset;

この問題は、事前に(変数Resourcesが使われる前に)Resourcesを初期化することで解決します。
同様に、変数filePassも初期化される前に使われていますから、事前に初期化する必要があります。

投稿2017/09/06 08:26

coco_bauer

総合スコア6915

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

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

Avent

2017/09/06 08:32

具体的のどのようにすればResoucesを初期化できるのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問