//----------------------------------------------------------------- //! @summary 再生中の更新処理 //! //! @parameter [elapsedTime] 経過時間 //! @parameter [noteSpeed] ノーツ速度 //! //! @return なし //----------------------------------------------------------------- public void UpdatePlay(float elapsedTime, float noteSpeed) { Vector3 position = m_transform.localPosition; position.y = -PiarhythmUtility.ConvertTimeToPosition(elapsedTime, noteSpeed * 20.0f); m_transform.anchoredPosition = position; }
//----------------------------------------------------------------- //! @summary 指定された時間の位置に座標を移動させる //! //! @parameter [nowTime] 移動させる時間 //! //! @return なし //----------------------------------------------------------------- public void SetNowTime(float nowTime) { Vector3 position = m_transform.localPosition; position.y = m_transform.sizeDelta.y - PiarhythmUtility.ConvertTimeToPosition(nowTime, NotesManager.NOTES_SPEED); m_transform.anchoredPosition = position; }
//----------------------------------------------------------------- //! @summary 背景の生成 //! //! @parameter [startTime] 小節の開始時間 //! @parameter [endTime] 小節の終了時間 //! //! @return なし //----------------------------------------------------------------- public void CreateMusicScoreBackGround(float startTime, float endTime) { // オブジェクトを生成する GameObject backGround = Instantiate(m_musicScoreBackGroundPrefab); // 親子関係を組ませる RectTransform rectTransform = backGround.GetComponent <RectTransform>(); if (m_transform) { rectTransform.SetParent(m_transform); } // 生成した背景を常にヒエラルキーの上に設定する rectTransform.SetSiblingIndex(1); // 親子関係を組んだことで変化した値を修正する rectTransform.localScale = Vector3.one; rectTransform.anchoredPosition = new Vector3(0.0f, rectTransform.anchoredPosition.y); rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f); // 開始時間と終了時間を座標に変換する Vector2 offsetMin = rectTransform.offsetMin; Vector2 offsetMax = rectTransform.offsetMax; offsetMin.y = PiarhythmUtility.ConvertTimeToPosition(startTime, NotesManager.NOTES_SPEED); offsetMax.y = PiarhythmUtility.ConvertTimeToPosition(endTime, NotesManager.NOTES_SPEED); // 設定する rectTransform.offsetMin = offsetMin; rectTransform.offsetMax = offsetMax; }
//----------------------------------------------------------------- //! @summary 更新処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- private void LoadAudioCrip() { // ファイルを読み込む StartCoroutine(m_coroutine); // 読み込みが完了した if (m_coroutine.Current.isDone) { // AudioClipへ変換する AudioClip audioClip = PiarhythmUtility.ConvertToAudioClip(m_coroutine.Current.webRequest); // 読み込みフラグを倒す m_loadFlag = false; if (audioClip) { // コンポーネントの取得 m_audioSource = GetComponent <AudioSource>(); // AudioSourceに設定する m_audioSource.clip = audioClip; // アニメーションを開始する m_keyboardController.PlayAnimation(); } } }
//----------------------------------------------------------------- //! @summary 背景の生成処理 //! //! @parameter [startTime] 小節の開始時間 //! @parameter [endTime] 小節の終了時間 //! //! @return なし //----------------------------------------------------------------- private void CreateMusicScoreBackGround(float startTime, float endTime) { // オブジェクトを生成する GameObject backGround = Instantiate(m_musicScoreBackGroundPrefab); // 親子関係を組ませる RectTransform rectTransform = backGround.GetComponent <RectTransform>(); if (m_transform) { rectTransform.SetParent(m_transform); } // 親子関係を組んだことで変化した値を修正する rectTransform.localScale = Vector3.one; rectTransform.anchoredPosition = new Vector3(0.0f, rectTransform.anchoredPosition.y); rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f); // 開始時間と終了時間を座標に変換する Vector2 offsetMin = rectTransform.offsetMin; Vector2 offsetMax = rectTransform.offsetMax; offsetMin.y = PiarhythmUtility.ConvertTimeToPosition(startTime, m_settingData.m_noteSpeed * 20.0f); offsetMax.y = PiarhythmUtility.ConvertTimeToPosition(endTime, m_settingData.m_noteSpeed * 20.0f); // 設定する rectTransform.offsetMin = offsetMin; rectTransform.offsetMax = offsetMax; }
//----------------------------------------------------------------- //! @summary 設定データを保存する //! //! @parameter [settingData] 保存する設定データ //! //! @return なし //----------------------------------------------------------------- public void SaveSettingData(PiarhythmDatas.SettingData settingData) { // json文字列に変換する string jsonString = JsonConvert.SerializeObject(settingData); // ファイルに書き込んで保存する PiarhythmUtility.WriteFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, jsonString, false); }
//----------------------------------------------------------------- //! @summary 現在時間の取得 //! //! @parameter [void] なし //! //! @return 現在時間 //----------------------------------------------------------------- public float GetNowTime() { // 座標を時間に変換する float position = -m_transform.offsetMin.y; float nowTime = PiarhythmUtility.ConvertPositionToTime(position, NotesManager.NOTES_SPEED); // 値を返す return(nowTime); }
//----------------------------------------------------------------- //! @summary シーンを遷移させる //! //! @parameter [sceneID] 遷移させるシーンID //! //! @return なし //----------------------------------------------------------------- public void LoadScene(PiarhythmDatas.ScenenID scenenID) { if (scenenID == PiarhythmDatas.ScenenID.SCENE_PLAY) { // 選択されている曲のファイルパスを保存する PlayerPrefs.SetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, m_musicPathDictionary[m_selectMusic]); } // シーンを遷移する PiarhythmUtility.LoadScene(scenenID); }
//----------------------------------------------------------------- //! @summary 設定シーンを閉じる //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void OnRevertButton() { // json文字列に変換する string json = JsonUtility.ToJson(m_systemData); // ファイルに書き出し string dataFilePath = UnityEngine.Application.dataPath + "/StreamingAssets/Data/System/SystemData.json"; File.WriteAllText(dataFilePath, json); // 前のシーンに戻る PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SETTING); }
//----------------------------------------------------------------- //! @summary 保存ボタンが押された時の処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void OnClickSaveButton() { // ダイアログを開いて、保存するファイルパスを決める string filePath = PiarhythmUtility.OpenExistFileDialog( PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH, "JSONファイル(*.json)|*.json"); // ファイルが選択されていなければ処理を終了する if (filePath == "") { return; } // 楽曲データの保存処理 m_editManager.SaveMusicPiece(filePath); }
//----------------------------------------------------------------- //! @summary BGMデータを設定する(設定引数あり) //! //! @parameter [BGMData] 設定するBGMData //----------------------------------------------------------------- public void SetBGMData(PiarhythmDatas.BGMData BGMData) { // 設定するデータがない場合、処理を終了する if (BGMData == null) { return; } // 設定する m_BGMData = BGMData; // 読み込み開始フラグをたてる m_loadFlag = true; // コルーチンを設定する m_coroutine = PiarhythmUtility.LoadAudioFile(m_BGMData.m_path); }
//----------------------------------------------------------------- //! @summary 楽曲データの保存処理 //! //! @parameter [filePath] 保存するファイルパス //! //! @return なし //----------------------------------------------------------------- public void SaveMusicPiece(string filePath) { // 音楽ファイルのパスを取得する string audioFilePath = m_bgmSheetController.GetAudioFilePath(); // BGMデータを取得する PiarhythmDatas.BGMData bgmData = m_bgmSheetController.GetBGMData(); if ((audioFilePath == null) && (bgmData != null)) { audioFilePath = bgmData.m_path; } // BGMをコピーする if ((audioFilePath != null) && (bgmData != null)) { PiarhythmUtility.CopyFile(audioFilePath, bgmData.m_path); } // ノーツデータを取得する PiarhythmDatas.NoteData[] notesDatas = m_notesManager.GetNotesDatas(); // 設定データを取得する PiarhythmDatas.OptionData optionData = m_optionSheetController.GetOptionData(); // 楽曲データを作成する PiarhythmDatas.MusicPieceData musicPieceData = ScriptableObject.CreateInstance <PiarhythmDatas.MusicPieceData>(); musicPieceData.m_bgmData = bgmData; musicPieceData.m_noteDataList = notesDatas; musicPieceData.m_optionData = optionData; // json文字列に変換する string jsonString = JsonConvert.SerializeObject(musicPieceData, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Serialize }); // 拡張子があるか調べる if (Path.GetExtension(filePath) != ".json") { filePath += ".json"; } // ファイルに書き込んで保存する PiarhythmUtility.WriteFileText(filePath, jsonString); }
//----------------------------------------------------------------- //! @summary 更新処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SELECT); } if (m_loadFlag) { // AudioCripの読み込み LoadAudioCrip(); } else { if (m_playedFlag) { // BGMを再生させる if ((m_elapsedTime >= m_bgmStartTime) && (m_audioSource != null) && (!m_bgmPlayedFlag)) { m_audioSource.Play(); m_bgmPlayedFlag = true; } // 再生中の更新処理 UpdatePlay(); } else { // アニメーションの終了 if (!m_keyboardController.GetPlayFlag()) { // 再生位置を設定する if (m_audioSource != null) { m_audioSource.time = m_musicPieceData.m_bgmData.m_startTime; } m_playedFlag = true; } } } }
//----------------------------------------------------------------- //! @summary 曲選択ボタンが押された時の処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void OnClickSelectButton() { // ダイアログを開いて、ファイルパスを取得する m_filePath = PiarhythmUtility.OpenExistFileDialog( Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "WAVファイル(*.wav) | *.wav"); // ファイルが選択されていなければ処理を終了する if (m_filePath == "") { return; } // 読み込み開始フラグをたてる m_loadFlag = true; // コルーチンを設定する m_coroutine = PiarhythmUtility.LoadAudioFile(m_filePath); }
//----------------------------------------------------------------- //! @summary ノーツの開始時間を設定する //! //! @parameter [startTime] 設定する開始時間 //----------------------------------------------------------------- public void SetNotesStartTime(float startTime) { // 開始位置がマイナスだった場合は処理を終了する if (startTime < 0.0f) { return; } // データを更新する m_notesData.m_startBeat = PiarhythmUtility.MRound(startTime, 0.25f); // 位置の更新 PiarhythmDatas.PositionData positionData = m_optionSheetController.ConvertToPositionData(m_notesData.m_startBeat, m_notesData.m_noteLength); m_transform.offsetMin = new Vector2(m_transform.offsetMin.x, positionData.m_position); m_transform.offsetMax = new Vector2(m_transform.offsetMax.x, m_transform.offsetMin.y + positionData.m_lenght); // UIを更新 m_notesSheetController.DisplayNotes(this); }
//----------------------------------------------------------------- //! @summary 楽曲データの読み込み処理 //! //! @parameter [filePath] 読み込むファイルパス //! //! @return なし //----------------------------------------------------------------- public void LoadMusicPiece(string filePath) { // ファイルを読み込む string jsonString = null; PiarhythmUtility.ReadFileText(filePath, ref jsonString); // オブジェクトに変換する PiarhythmDatas.MusicPieceData musicPieceData = JsonConvert.DeserializeObject <PiarhythmDatas.MusicPieceData>(jsonString); // 設定データの設定と初期化 m_optionSheetController.Start(musicPieceData.m_optionData); // BGMデータの設定 if (musicPieceData.m_bgmData != null) { if (musicPieceData.m_bgmData.m_path == "") { m_bgmSheetController.SetBGMData(null); } else { m_bgmSheetController.SetBGMData(musicPieceData.m_bgmData); } } // 通常ノーツの生成 foreach (PiarhythmDatas.NoteData noteData in musicPieceData.m_noteDataList) { // ノーツの生成 if (noteData.m_nextNoteData == null) { m_notesManager.CreateNotes(noteData); } else { m_notesManager.CreateConnectNote(noteData); } } }
//----------------------------------------------------------------- //! @summary 戻るボタンが押された時の処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- public void OnClickRevertButton() { if (PiarhythmUtility.MessegeBoxYesOrNo("セーブをしますか?")) { // ダイアログを開いて、保存するファイルパスを決める string filePath = PiarhythmUtility.OpenExistFileDialog( PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH, "JSONファイル(*.json)|*.json"); // ファイルが選択されていなければ処理を終了する if (filePath == "") { return; } // 楽曲データの保存処理 m_editManager.SaveMusicPiece(filePath); } // タイトルシーンに遷移する PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_TITLE); }
// メンバ関数の定義 ===================================================== #region 更新処理 //----------------------------------------------------------------- //! @summary 更新処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- private void Update() { if (m_loadFlag) { // ファイルを読み込む StartCoroutine(m_coroutine); // 読み込みが完了した if (m_coroutine.Current.isDone) { // AudioClipへ変換する m_audioClip = PiarhythmUtility.ConvertToAudioClip(m_coroutine.Current.webRequest); // 読み込みフラグを倒す m_loadFlag = false; if (m_audioClip) { // BGMデータを設定する if (m_BGMData == null) { SetBGMData(); } // オーディオクリップを設定し、スクロールバーのテクスチャを更新する m_notesEditScrollbarController.SetAudioClip(m_audioClip); // UIへ反映させる DisplayBGMData(); m_musicalScoreController.ChangeScoreLength(m_BGMData.m_endTime); m_menuController.UpdateDisplayWholeTimeText(m_BGMData.m_endTime); m_optionSheetController.SetWholeMeasure(m_BGMData.m_endTime); // AudioSourceに設定する m_editManager.SetAudioClip(m_audioClip); } } } }
//----------------------------------------------------------------- //! @summary 初期化処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- private void Start() { // 設定データを読み込む string jsonString = null; PiarhythmUtility.ReadFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, ref jsonString); // オブジェクトに変換する PiarhythmDatas.SettingData settingData = JsonConvert.DeserializeObject <PiarhythmDatas.SettingData>(jsonString); // 設定シートの値を渡す m_settingSheetController.SetSettingData(settingData); // UIに反映させる m_settingSheetController.DispleySettingData(); // 楽曲データのファイルパスを取得する m_musicPathDictionary = new Dictionary <string, string>(); string[] musicPieceArray = Directory.GetFiles(PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH, "*.json", SearchOption.AllDirectories); foreach (string musicPath in musicPieceArray) { // ファイル名を取得する string fileName = Path.GetFileNameWithoutExtension(musicPath); // 登録する m_musicPathDictionary[fileName] = musicPath; // タイルを作成する m_scrollController.CreateSoundTile(fileName); } // 前回選択された曲を設定する string filePath = PlayerPrefs.GetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, "None"); m_musicSheetController.DisplaySelectMusicName(m_selectMusic = Path.GetFileNameWithoutExtension(filePath)); }
//----------------------------------------------------------------- //! @summary 再生中の更新処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- private void UpdatePlay() { // 経過時間を更新する m_elapsedTime += Time.deltaTime; // 譜面の更新処理 m_musicController.UpdatePlay(m_elapsedTime, m_settingData.m_noteSpeed); // BGMの更新処理 if (m_audioSource) { if (m_musicPieceData.m_bgmData.m_endTime <= m_elapsedTime) { m_audioSource.Stop(); } } // 楽曲の終了処理 if (m_elapsedTime >= m_wholeTime) { PiarhythmUtility.LoadScene(PiarhythmDatas.ScenenID.SCENE_SELECT); } }
//----------------------------------------------------------------- //! @summary ノーツの開始拍と音符から開始座標と長さに変換する //! //! @parameter [startBeat] 開始の拍数 //! @parameter [noteLength] 音符の長さ //! //! @return 変換された座標 //----------------------------------------------------------------- public PiarhythmDatas.PositionData ConvertToPositionData(float startBeat, int noteLenght) { PiarhythmDatas.PositionData positionData = new PiarhythmDatas.PositionData(); float elapsedBeat = 0.0f; float elapsedPosition = 0.0f; // 所属しているテンポデータを調べる PiarhythmDatas.TempoData tempoData = m_tempoDataList[0]; for (int i = 1; i < m_tempoDataList.Length; ++i) { if (startBeat >= m_tempoDataList[i].m_startMeasure * 4) { // 一拍当たりの時間を求める float beatPerTempo = 60.0f / tempoData.m_tempo; // 時間を座標に変換する float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, m_settingData.m_noteSpeed * 20.0f); // テンポデータの終了座標を求める elapsedPosition += beatPosition * ((m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4); // 経過拍数を増やす elapsedBeat += (m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4; tempoData = m_tempoDataList[i]; } else { break; } } { // 一拍当たりの時間を求める float beatPerTempo = 60.0f / tempoData.m_tempo; // 時間を座標に変換する float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, m_settingData.m_noteSpeed * 20.0f); // テンポデータを元に座標と長さを決める positionData.m_position = elapsedPosition + (startBeat - elapsedBeat) * beatPosition; switch (noteLenght) { case 0: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.WHOLE_NOTE_SEMIBREVE; break; case 1: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.HALF_NOTE_MININ; break; case 2: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.QUARTER_NOTE_CROCHET; break; case 3: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.EIGHTH_NOTE_QUAVER; break; case 4: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.SIXTEENTH_NOTE_SEMIQUAVER; break; case 5: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.WHOLE_DOTTED_NOTE_SEMIBREVE; break; case 6: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.HALF_DOTTED_NOTE_MININ; break; case 7: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.QUARTER_DOTTED_NOTE_CROCHET; break; case 8: positionData.m_lenght = beatPosition * PiarhythmDatas.NoteTime.EIGHTH_DOTTED_NOTE_QUAVER; break; } } return(positionData); }
//----------------------------------------------------------------- //! @summary ノーツの開始座標と長さから開始拍と音符に変換する //! //! @parameter [positionData] 座標データ //! //! @return ノーツデータ //----------------------------------------------------------------- public PiarhythmDatas.NoteData ConvertToNotesData(PiarhythmDatas.PositionData positionData) { PiarhythmDatas.NoteData notesData = ScriptableObject.CreateInstance <PiarhythmDatas.NoteData>(); float elapsedBeat = 0.0f; float elapsedPosition = 0.0f; // 所属しているテンポデータを調べる PiarhythmDatas.TempoData tempoData = m_tempoDataList[0]; for (int i = 1; i < m_tempoDataList.Count; ++i) { // 一拍当たりの時間を求める float beatPerTempo = 60.0f / tempoData.m_tempo; // 時間を座標に変換する float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, NotesManager.NOTES_SPEED); // テンポデータの終了座標を求める float endPosition = beatPosition * ((m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4) + elapsedPosition; if (positionData.m_position >= endPosition) { // 経過座標を更新する elapsedPosition = endPosition; // 経過拍数を増やす elapsedBeat += (m_tempoDataList[i].m_startMeasure - tempoData.m_startMeasure) * 4; // 現在のテンポデータを更新する tempoData = m_tempoDataList[i]; } else { break; } } // 現在のテンポデータから正確な位置を確定させる { float beatPerTempo = 60.0f / tempoData.m_tempo; float beatPosition = PiarhythmUtility.ConvertTimeToPosition(beatPerTempo, NotesManager.NOTES_SPEED); // 残りの座標を求める float residualPosition = positionData.m_position - elapsedPosition; // 残りの拍数を求める float residualBeat = residualPosition / beatPosition; // 残りの拍数を0.25倍に丸める residualBeat = PiarhythmUtility.MRound(residualBeat, 0.25f); // 経過拍数に加算する elapsedBeat += residualBeat; // データを保存する notesData.m_startBeat = elapsedBeat; // 長さを求める float noteLength = positionData.m_lenght / beatPosition; // 0.25倍に丸める noteLength = PiarhythmUtility.MRound(noteLength, 0.25f); // 一番近い長さを元に音符を決める if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.WHOLE_NOTE_SEMIBREVE)) { notesData.m_noteLength = 0; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.HALF_NOTE_MININ)) { notesData.m_noteLength = 1; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.QUARTER_NOTE_CROCHET)) { notesData.m_noteLength = 2; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.EIGHTH_NOTE_QUAVER)) { notesData.m_noteLength = 3; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.SIXTEENTH_NOTE_SEMIQUAVER)) { notesData.m_noteLength = 4; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.WHOLE_DOTTED_NOTE_SEMIBREVE)) { notesData.m_noteLength = 5; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.HALF_DOTTED_NOTE_MININ)) { notesData.m_noteLength = 6; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.QUARTER_DOTTED_NOTE_CROCHET)) { notesData.m_noteLength = 7; } else if (Mathf.Approximately(noteLength, PiarhythmDatas.NoteTime.EIGHTH_DOTTED_NOTE_QUAVER)) { notesData.m_noteLength = 8; } else { notesData.m_noteLength = 2; } } return(notesData); }
//----------------------------------------------------------------- //! @summary 初期化処理 //! //! @parameter [void] なし //! //! @return なし //----------------------------------------------------------------- void Start() { // 設定データを読み込む string jsonString = null; PiarhythmUtility.ReadFileText(PiarhythmDatas.SETTING_DATA_FILE_PATH, ref jsonString); // インスタンスを作成する m_settingData = JsonConvert.DeserializeObject <PiarhythmDatas.SettingData>(jsonString); // 設定データを設定する m_musicController.SetSettingData(m_settingData); // プレイする楽曲データのファイルパスを取得する string filePath = PlayerPrefs.GetString(PiarhythmDatas.PLAY_MUSIC_PIECE_FILE_PATH, null); if (filePath == "") { filePath = PiarhythmDatas.MUSIC_PIECE_DIRECTORY_PATH + "YUBIKIRI-GENMAN -special edit-.json"; } // 楽曲データを読み込む PiarhythmUtility.ReadFileText(filePath, ref jsonString); // インスタンスを作成する m_musicPieceData = JsonConvert.DeserializeObject <PiarhythmDatas.MusicPieceData>(jsonString); // 背景を作成する if (m_musicPieceData.m_optionData.m_tempDatas.Length != 0) { for (int i = 1; i < m_musicPieceData.m_optionData.m_tempDatas.Length; ++i) { m_musicPieceData.m_optionData.m_tempDatas[i].m_startMeasure += 2; } } m_musicPieceData.m_optionData.m_wholeMeasure += 5; m_musicController.CreateMusicScoreBackGround(m_musicPieceData.m_optionData); // 楽曲全体の時間を取得する m_wholeTime = m_musicController.GetWholeTime(); // ノーツを生成する for (int i = 0; i < m_musicPieceData.m_noteDataList.Length; ++i) { m_musicPieceData.m_noteDataList[i].m_startBeat += 8; } m_musicController.CreateNoteList(m_musicPieceData.m_noteDataList); // BGMを読み込む if (m_musicPieceData.m_bgmData != null) { if (m_musicPieceData.m_bgmData.m_path != null) { // 読み込み開始フラグをたてる m_loadFlag = true; // コルーチンを設定する m_coroutine = PiarhythmUtility.LoadAudioFile(m_musicPieceData.m_bgmData.m_path); } else { // アニメーションを開始する m_keyboardController.PlayAnimation(); } } else { // アニメーションを開始する m_keyboardController.PlayAnimation(); } // BGMの開始時間を計算する // 一拍当たりの時間を求める float beatPerTempo = 60.0f / m_musicPieceData.m_optionData.m_tempDatas[0].m_tempo; m_bgmStartTime = beatPerTempo * 8.0f; }