//----------------------------------------------------------------- //! @summary 設定データの取得 //! //! @return 設定データ //----------------------------------------------------------------- public PiarhythmDatas.OptionData GetOptionData() { // データをまとめる PiarhythmDatas.OptionData optionData = ScriptableObject.CreateInstance <PiarhythmDatas.OptionData>(); optionData.m_tempDatas = m_tempoDataList.ToArray(); optionData.m_wholeMeasure = m_wholeMeasure; return(optionData); }
//----------------------------------------------------------------- //! @summary 設定データから背景を作成する //! //! @parameter [optionData] 設定データ //! //! @return なし //----------------------------------------------------------------- public void CreateMusicScoreBackGround(PiarhythmDatas.OptionData optionData) { // テンポデータの保存 m_tempoDataList = optionData.m_tempDatas; // 時間を初期化 m_wholeTime = 0.0f; // テンポデータ分計算する PiarhythmDatas.TempoData prevTempData = ScriptableObject.CreateInstance <PiarhythmDatas.TempoData>(); prevTempData.m_tempo = 0; foreach (PiarhythmDatas.TempoData tempoData in optionData.m_tempDatas) { if (prevTempData.m_tempo != 0) { // 一拍当たりの時間を求める float beatPerTempo = 60.0f / prevTempData.m_tempo; for (int i = prevTempData.m_startMeasure; i < tempoData.m_startMeasure; ++i) { // 開始時間を保存する float startTime = m_wholeTime; // 1小節分加算する m_wholeTime += beatPerTempo * 4.0f; // 背景を生成する CreateMusicScoreBackGround(startTime, m_wholeTime); } } prevTempData = tempoData; } // 最後に残りの小節分加算する // 一拍当たりの時間を求める { float beatPerTempo = 60.0f / prevTempData.m_tempo; for (int i = prevTempData.m_startMeasure; i < optionData.m_wholeMeasure; ++i) { // 開始時間を保存する float startTime = m_wholeTime; // 1小節分加算する m_wholeTime += beatPerTempo * 4.0f; // 背景を生成する CreateMusicScoreBackGround(startTime, m_wholeTime); } } }
//----------------------------------------------------------------- //! @summary 初期化処理(設定データあり) //! //! @parameter [optionData] 設定データ //! //! @return なし //----------------------------------------------------------------- public void Start(PiarhythmDatas.OptionData optionData) { // 全体小節数の設定 m_wholeMeasure = optionData.m_wholeMeasure; // テンポノードをリセットする m_tempoDataList.RemoveRange(1, m_tempoDataList.Count - 1); for (int i = 1; i < m_tempoNodeContent.childCount; ++i) { Destroy(m_tempoNodeContent.GetChild(i).gameObject); } // 最初のテンポノードを設定する m_tempoNodeContent.GetChild(0).GetComponent <TempoNodeController>().SetTempoData(optionData.m_tempDatas[0]); m_tempoDataList[0] = optionData.m_tempDatas[0]; for (int i = 1; i < optionData.m_tempDatas.Length; ++i) { // テンポノードを作成する GameObject tempoNode = Instantiate(m_tempoNodePrefab); // コンテナに登録する RectTransform rectTransform = tempoNode.GetComponent <RectTransform>(); rectTransform.SetParent(m_tempoNodeContent); // 親子関係を組んだことで変化した値を修正する rectTransform.localScale = Vector3.one; rectTransform.localPosition = new Vector3(rectTransform.localPosition.x, rectTransform.localPosition.y, 0.0f); // コントローラーを設定する TempoNodeController tempoNodeController = tempoNode.GetComponent <TempoNodeController>(); tempoNodeController.SetOptionSheetController(this); // テンポデータを設定する tempoNodeController.SetTempoData(optionData.m_tempDatas[i]); // データを追加する m_tempoDataList.Add(tempoNodeController.GetTempoData()); // 要素番号を設定する tempoNodeController.SetIndex(m_tempoDataList.Count - 1); } // 全体時間を計算する CalculateWholeTime(); // UIへ反映させる m_wholeMeasureInputField.text = m_wholeMeasure.ToString(); }
//----------------------------------------------------------------- //! @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); }