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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

2回答

2561閲覧

UniRxを実装する上でのエラーについて

motuo200

総合スコア5

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/03/26 06:18

前提・実現したいこと

Unityで音ゲーの作成をしたいと考えています。
以下のサイトを参考にさせて頂き、作成しています。

参考サイト:【Unity】音ゲーの仕組みを学び「〇〇の達人」をUnityで作る

この太鼓の達人を3D空間にして作成しており、(参考サイトでは2D)
基本的な構造を理解するうえでほぼ同様なソースコードを記入していきました。
そのうえで発生したエラーなのですがご教授願いたいです。

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

NullReferenceException: Object reference not set to an instance of an object GameManager.<OnEnable>b__15_3 (UniRx.Unit _) (at Assets/Scripts/GameManager.cs:54)

該当のソースコード

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6using UniRx; 7using UniRx.Triggers; 8 9public class GameManager : MonoBehaviour 10{ 11 [SerializeField] string FilePath; 12 13 [SerializeField] Button Play; 14 [SerializeField] Button SetChart; 15 16 [SerializeField] GameObject Blue; 17 [SerializeField] GameObject Red; 18 19 [SerializeField] Transform SpawnPoint; 20 [SerializeField] Transform BeatPoint; 21 22 float PlayTime; //ゲーム開始時間 23 float Distance; //判定位置までの距離 24 float During; //初期位置から判定までの時間 25 bool isPlaying; //ゲーム中か 26 int GoIndex; //Notesの発射対象のノーツのインデックス 27 28 string Title; 29 int BPM; 30 List<GameObject> Notes; 31 32 void OnEnable() 33 { 34 //ノーツから初期位置までにかける時間を2000msとする 35 Distance = Math.Abs(BeatPoint.position.x - SpawnPoint.position.x); 36 During = 2 * 1000; 37 isPlaying = false; 38 GoIndex = 0; 39 40 //調整用 41 Debug.Log(Distance); 42 43 44 Play.onClick 45 .AsObservable() 46 .Subscribe(_ => play()); 47 48 SetChart.onClick 49 .AsObservable() 50 .Subscribe(_ => loadChart()); 51 52 this.UpdateAsObservable() 53 .Where(_ => isPlaying) 54 .Where(_ => Notes.Count > GoIndex) //エラーを吐いている54行目 55 .Where(_ => Notes[GoIndex].GetComponent<NoteController>().getTiming() <= ((Time.time * 1000 - PlayTime) + During)) 56 .Subscribe(_ => { 57 Notes[GoIndex].GetComponent<NoteController>().go(Distance, During); 58 GoIndex++; 59 }); 60 61 } 62 63//以下続く

試したこと

Play.onClick .AsObservable() .Subscribe(_ => play()); SetChart.onClick .AsObservable() .Subscribe(_ => loadChart());

このplayの中にあるDebugは通ったのでエラーはthis.UpdateAsObservable内にあると考えた。(よく考えたらエラーが54行目って書いてた・・・)

jsonファイルを読み込むPathが違うと考えた為間違えていないかチェックした

###開発環境
Unity 2019.1.12f1
OS:Windows10

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

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

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

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

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

guest

回答2

0

ベストアンサー

SetChartボタンを押す前にPlayボタンを押していませんか?

元記事を軽く見てみましたが、SetChart内(loadChart内)でNotesの初期化を行っていたため初期化前にPlayが押されるとIsPlayingがtrueになってしまいUpdateAsObservable以下の処理が走ってしまいぬるぽになってしまいます

投稿2020/03/26 12:36

MMashiro

総合スコア2380

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

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

motuo200

2020/03/26 15:50

返信ありがとうございます。 SetChart>Playの通りに作成した際に動作し解決しました。 ありがとうございます。
guest

0

Notesが存在していない(つまりnull)と言われているので
this.UpdateAsObservable()の前の行にNotes = new List<GameObject>();を追加してみてください。

Null Reference Exception - Unity マニュアル

投稿2020/03/26 07:08

sakura_hana

総合スコア11427

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

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

motuo200

2020/03/26 15:54

返信ありがとうございます。 リストの関数がヌルになる場合の想定はしており、 省略した部分にリストの関数を作成していました。 こちらがその部分を詳しく書くべきでした。申し訳ないです。 しかし、マニュアルまでつけてご教授して頂いた件について感謝申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問