Unityで音ゲーの制作をしているのですが、エラーメッセージにオブジェクトのインスタンスに設定されていない
オブジェクト参照と出てきました。
StringReader reader = new StringReader(csv.text);
オブジェクトのインスタンスに設定されていないオブジェクト参照の意味が分かりません。
どういう意味なのか?、なぜこのようなエラーをはいたのかも教えてくれると助かります。
s.kが👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
自己解決
解決しました。ありがとうございます。
filePassのcsvがちゃんと読み込めてなかったみたいです。
再度csvを読み込んだら治りました。
投稿2020/03/15 03:58
総合スコア6
0
NullReferenceException の日本語訳みたいです
その行でエラーが出ているのなら、csv == null だと思われます
投稿2020/03/14 08:56
総合スコア2856
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
ブレークポイントでUnityにアタッチしてみたらcsvがnullだったことを確認できました
ですが、なぜnullなのかがよく見てもわかりません。教えてください
下記がそのソースコードです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.IO;
public class GameController : MonoBehaviour
{
public GameObject[] notes;
private float[] _timing;
private int[] _lineNum;
public string filePass;
private int _notesCount = 0;
private float _startTime = 0;
public float timeOffset = -1;
private bool _isPlaying = false;
public GameObject startButton;
private AudioSource _audioSource;
public Text scoreText;
private int _score = 0;
void Start()
{
_audioSource = GameObject.Find("GameMusic").GetComponent<AudioSource>();
_timing = new float[1024];
_lineNum = new int[1024];
LoadCSV();
}
void Update()
{
if (_isPlaying)
{
CheckNextNotes();
scoreText.text = _score.ToString();
}
}
public void StartGame()
{
startButton.SetActive(false);
_startTime = Time.time;
_audioSource.Play();
_isPlaying = true;
}
void CheckNextNotes()
{
while (_timing[_notesCount] + timeOffset < GetMusicTime() && _timing[_notesCount] != 0)
{
SpawnNotes(_lineNum[_notesCount]);
_notesCount++;
}
}
void SpawnNotes(int num)
{
Instantiate(notes[num],new Vector3(-4.0f + (2.0f * num), 10.0f, 0),Quaternion.identity);
}
private void LoadCSV()
{
TextAsset csv = Resources.Load(filePass) as TextAsset;
//Debug.Log(csv.text);
StringReader reader = new StringReader(csv.text);
int i = 0;
while (reader.Peek() > -1)
{
string line = reader.ReadLine();
string[] values = line.Split(',');
for (int j = 0; j < values.Length; j++)
{
_timing[i] = float.Parse(values[0]);
_lineNum[i] = int.Parse(values[1]);
}
i++;
}
}
float GetMusicTime()
{
return Time.time - _startTime;
}
public void GoodTimingFunc(int num)
{
Debug.Log("Line:" + num + " good!");
Debug.Log(GetMusicTime());
_score++;
}
}
2020/03/14 10:32
csv = Resources.Load(filePass) as TextAsset
as演算子(https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/type-testing-and-cast#as-operator)は指定された型に変換できない場合はnullを返します。
Loadで読み込んだものがTextAssetに変換できていないのではないですか?
2020/03/15 03:57
解決しました。ありがとうございます。
filePassのcsvがちゃんと読み込めてなかったみたいです。
再度csvを読み込んだら治りました。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。