public void SetMusicData(int difficulty, string id) { try { MusicDataLoader.MusicProperty data = GetComponent <MusicDataLoader>().getMusicProperty(id); if (data.level[difficulty] == -1) { return; } //Frame RawImage Frame = GetComponent <RawImage>(); Frame.texture = FrameTexture[difficulty]; //Title MusicTitleUI.text = data.music; //Credits CreditsUI.text = data.credits; //Artwork byte[] bytes = File.ReadAllBytes("Music/" + id + "/image.png"); Texture2D texture = new Texture2D(500, 500); texture.LoadImage(bytes); ArtworkUI.texture = texture; //BPM BPMUI.text = "BPM " + GetComponent <MusicDataLoader>().getNotesData(difficulty, id).BPM.ToString(); //Level LevelUI.text = data.level[difficulty].ToString(); //Score & Combo ScoreController.Score temp = ScoreController.LoadScore(DataHolder.UserID, difficulty, id); ComboUI.text = "COMBO " + temp.MaxCombo.ToString(); ScoreUI.text = temp.MaxScore.ToString(); //Time string path = "Music/" + id + "/music.wav"; StartCoroutine(SetAudioTime(path)); } catch (Exception e) { Debug.LogError(e.Message); } }
private void PlayMusicPreview(int selection) { seq.Kill(); seq = DOTween.Sequence(); if (selection != -1) { string id = SortedMusicList[selection]; MusicDataLoader.MusicProperty list = GetComponent <MusicDataLoader>().getMusicProperty(id); float starttime = list.preview.start; float endtime = list.preview.end; MusicPreview.volume = 0; StartCoroutine(GetAudioClip(id, starttime)); seq.Join( MusicPreview.DOFade(1, fadeTime) ); seq.Insert(endtime - starttime, MusicPreview.DOFade(0, fadeTime) ); seq.Insert(endtime - starttime + fadeTime, DOVirtual.DelayedCall(0, () => { MusicPreview.Stop(); PlayMusicPreview(selection); }) ); } else { seq.Join( MusicPreview.DOFade(0, fadeTime) ); seq.Insert(fadeTime, DOVirtual.DelayedCall(0, () => { MusicPreview.Stop(); }) ); } seq.Play(); }
IEnumerator StartSettings() { //非デバッグ時の処理 if (MusicID == "") { MusicID = DataHolder.NextMusicID; Difficulty = DataHolder.Difficulty; PlayVideo = DataHolder.isVideo; GlobalOffset += DataHolder.GlobalNoteOffset; } else { DebugMode = true; Debug.LogWarning("エディタ用デバッグモードで起動中"); } DataHolder.DebugMode = DebugMode; //楽曲データ取得 DebugLog("楽曲データを取得中"); MusicDataLoader.MusicProperty musicinfo = GetComponent <MusicDataLoader>().getMusicProperty(MusicID); MusicName = musicinfo.music; Level = musicinfo.level[Difficulty]; Composer = musicinfo.credits; MusicDataLoader.Notes note = GetComponent <MusicDataLoader>().getNotesData(Difficulty, MusicID); BPM = note.BPM; Offset = note.offset; Notes = note.notes; MaxNotesAmount = Notes.Length; //ノーツ生成時刻計算 DebugLog("ノーツの移動開始時刻を計算中"); NoteStartTime = new double[MaxNotesAmount]; NoteStartTimeSlider = new double[MaxNotesAmount, 64]; double tSPB = ((double)60 / ((double)BPM * (double)Notes[0].LPB)); if ((tSPB * (double)Notes[0].num + ((double)Offset / (double)6000 * tSPB) - ArrivalTime + GlobalOffset) <= 0) { MusicStartTimeOffset = Mathf.Ceil(-(float)(tSPB * (double)Notes[0].num + ((double)Offset / (double)6000 * tSPB) - ArrivalTime + GlobalOffset)); DebugLog("ノーツ開始時間が負の数であるため、オフセットを設定しています " + MusicStartTimeOffset.ToString()); } for (int n = 0; n < MaxNotesAmount; n++) { //1ノーツの単位 60/(BPM*LPB) double SPB = (60 / ((double)BPM * (double)Notes[n].LPB)); double OffsetSec = ((double)Offset / ((660000 / ((double)Notes[n].LPB / 4)) / (double)BPM)) * SPB; NoteStartTime[n] = SPB * Notes[n].num + OffsetSec - ArrivalTime + GlobalOffset + MusicStartTimeOffset; if (Notes[n].type == 2) { for (int k = 0; k < Notes[n].notes.Length; k++) { double tempSPB = (60f / ((double)BPM * (double)Notes[n].notes[k].LPB)); double tempOffsetSec = ((double)Offset / ((660000 / ((double)Notes[n].notes[k].LPB / 4)) / (double)BPM)) * tempSPB; NoteStartTimeSlider[n, k] = tempSPB * Notes[n].notes[k].num + tempOffsetSec - ArrivalTime + GlobalOffset + MusicStartTimeOffset; } } if (n + 1 != MaxNotesAmount && Notes[n].num == Notes[n + 1].num && Notes[n].LPB == Notes[n + 1].LPB)// && Notes[n].type == Notes[n + 1].type) { NoteStartTime[n + 1] = NoteStartTime[n]; } } DebugLog("ノーツを生成中"); //ノーツ生成 NotesPrefab.SetActive(false); for (int i = 0; i < MaxNotesAmount; i++) { SpawnNotes(i, Notes[i].block, (60f / ((double)BPM * (double)Notes[i].LPB))); } //インターフェース DebugLog("UIの設定中"); MusicTitleText.text = MusicName; AuthorText.text = Composer; LevelText.text = Level.ToString(); ScoreText.text = Score.ToString(); ComboText.text = Combo.ToString(); //アートワーク設定 byte[] bytes = File.ReadAllBytes("Music/" + MusicID + "/image.png"); Texture2D texture = new Texture2D(55, 55, TextureFormat.ARGB4444, false); texture.LoadImage(bytes); texture.Compress(false); MusicArtwork.sprite = Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.width), new Vector2(0.5f, 0.5f)); //ビデオの設定 DebugLog("ビデオの設定中"); if (PlayVideo) { string videoPath = Directory.GetCurrentDirectory() + "/" + "Music/" + MusicID + "/video.mp4"; if (GetComponent <MusicDataLoader>().checkExist(videoPath)) { videoPlayer.url = "file://" + videoPath; videoPlayer.source = VideoSource.Url; } else { PlayVideo = false; } } if (!DebugMode) { Vector3 temp = rawImage.transform.localPosition; if (DataHolder.VideoSettingMode == "cut") { temp.z = 260; rawImage.transform.localPosition = temp; } else if (DataHolder.VideoSettingMode == "fit") { temp.z = 360; rawImage.transform.localPosition = temp; } } else { string VideoSettingMode = "cut"; Vector3 temp = rawImage.transform.localPosition; if (VideoSettingMode == "cut") { temp.z = 260; rawImage.transform.localPosition = temp; } else if (VideoSettingMode == "fit") { temp.z = 360; rawImage.transform.localPosition = temp; } } //音楽の設定 DebugLog("音楽の設定中"); string path = "Music/" + MusicID + "/music.wav"; StartCoroutine(GetAudioClip(path)); //画面の遷移 if (!DebugMode) { float timeDelay = 0.5f; GameObject[] changer = new GameObject[4]; RectTransform[] rectTran = new RectTransform[4]; for (int i = 0; i < 4; i++) { changer[i] = DataHolder.TemporaryGameObject.transform.Find(Difficulty.ToString()).Find(i.ToString()).gameObject; rectTran[i] = changer[i].GetComponent <RectTransform>(); } Sequence sceneChangeTween = DOTween.Sequence(); for (int i = 0; i < 4; i++) { sceneChangeTween.Insert(1 + 0.25f * (3 - i), rectTran[i].DOLocalMoveX(-1280, timeDelay).SetEase(Ease.OutQuint) ); } sceneChangeTween.Join( DOVirtual.DelayedCall(4f, () => { Destroy(SceneChange); }) ); sceneChangeTween.Play(); } yield return(new WaitForSeconds(4)); //Noteの設定 foreach (Transform childTransform in NotesParentObject.transform) { childTransform.gameObject.SetActive(true); } AllNotes = GameObject.FindGameObjectsWithTag("Note"); AllNotesSlider = GameObject.FindGameObjectsWithTag("NoteSlider"); foreach (Transform childTransform in NotesParentObject.transform) { childTransform.gameObject.SetActive(false); } //音楽の再生 TimeComponent.SetStartTime(MusicStartTimeOffset); DebugLog("音楽を再生しました"); DOVirtual.DelayedCall(MusicStartTimeOffset, () => { audioSource.Play(); if (PlayVideo) { videoPlayer.Play(); } }); //ステータス切り替え isPlaying = true; GameStatus = Status.InGame; }
private void Awake() { if (MusicID == "") { DebugMode = false; } else { DebugMode = true; } flag = false; sequence = DOTween.Sequence(); if (!DebugMode) { SceneChange = GameObject.Find("SceneChangeEnd"); } //初期座標設定 Background.localPosition = new Vector3(-1100f, Background.localPosition.y, Background.localPosition.z); Panel.localPosition = new Vector3(-950f, Panel.localPosition.y, Panel.localPosition.z); Artwork.localPosition = new Vector3(Artwork.localPosition.x, 180f, Artwork.localPosition.z); ArtworkImage.color = new Color(1f, 1f, 1f, 0f); Result.localPosition = new Vector3(-470f, Result.localPosition.y, Result.localPosition.z); Result.gameObject.SetActive(false); for (int i = 0; i < 5; i++) { Judgement[i].gameObject.SetActive(false); Judgement[i].localPosition = new Vector3(-300f - i * 20f, Judgement[i].localPosition.y, Judgement[i].localPosition.z); } Score.localPosition = new Vector3(-600f, Score.localPosition.y, Score.localPosition.z); Score.gameObject.SetActive(false); NewRecord.gameObject.SetActive(false); Rank.localScale = new Vector3(0f, 0f, 1f); RankImage.color = new Color(1f, 1f, 1f, 0f); PressButton.color = new Color(1f, 1f, 1f, 0f); //BGM 設定 string path = "Audio/result.wav"; StartCoroutine(GetAudioClip(path)); //値設定 if (!DebugMode) { UserID = DataHolder.UserID; ScoreValue = DataHolder.Score; ComboValue = DataHolder.Combo; MaximumScore = DataHolder.MaximumScore; MaximumCombo = DataHolder.MaximumCombo; Difficulty = DataHolder.Difficulty; MusicID = DataHolder.NextMusicID; ScoreController.Score sc = ScoreController.LoadScore(UserID, Difficulty, MusicID); CurrentHighscore = sc.MaxScore; CurrentMaxCombo = sc.MaxCombo; OldHighscore.text = LintNumber(7, sc.MaxScore); OldMaxcombo.text = LintNumber(4, sc.MaxCombo); for (int i = 0; i < 5; i++) { Judgement[i].Find("Text").GetComponent <TextMeshProUGUI>().text = LintNumber(4, DataHolder.JudgementAmount[i]); } } MusicDataLoader.MusicProperty MusicData = GetComponent <MusicDataLoader>().getMusicProperty(MusicID); if (!DebugMode) { Panel.Find("Level").Find("Text").GetComponent <Text>().text = MusicData.level[Difficulty].ToString(); Panel.Find("Difficulty").GetComponent <Text>().text = DifficultyName[Difficulty]; ScorePercentage = ((float)ScoreValue / (float)MaximumScore) * 100f; ComboPercentage = ((float)ComboValue / (float)MaximumCombo) * 100f; } Panel.Find("Title").GetComponent <Text>().text = MusicData.music; Panel.Find("Author").GetComponent <Text>().text = MusicData.credits; if (ScorePercentage >= 90) { RankImage.texture = RankImageSoruce[0]; } else if (ScorePercentage < 90 && ScorePercentage >= 80) { RankImage.texture = RankImageSoruce[1]; } else if (ScorePercentage < 80 && ScorePercentage >= 70) { RankImage.texture = RankImageSoruce[2]; } else if (ScorePercentage < 70) { RankImage.texture = RankImageSoruce[3]; } //Artwork byte[] bytes = System.IO.File.ReadAllBytes("Music/" + MusicID + "/image.png"); Texture2D texture = new Texture2D(55, 55, TextureFormat.ARGB4444, false); texture.LoadImage(bytes); texture.Compress(false); ArtworkImage.sprite = Sprite.Create(texture, new Rect(0f, 0f, texture.width, texture.width), new Vector2(0.5f, 0.5f)); //Background sequence.Insert(2f, Background.DOLocalMoveX(-410f, 0.5f).SetEase(Ease.OutQuint) ); //Panel sequence.Insert(2.5f, Panel.DOLocalMoveX(-490f, 0.5f).SetEase(Ease.OutQuint) ); //Artwork sequence.Insert(2.5f, Artwork.DOLocalMoveY(125f, 0.5f).SetEase(Ease.OutQuint) ); sequence.Insert(2.5f, DOTween.ToAlpha(() => ArtworkImage.color, color => ArtworkImage.color = color, 1f, 0.5f ).SetEase(Ease.OutQuint) ); //Result sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Result.gameObject.SetActive(true) ) ); sequence.Insert(2.5f, Result.DOLocalMoveX(250f, 0.5f).SetEase(Ease.OutQuint) ); //Judgement sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Judgement[0].gameObject.SetActive(true) ) ); sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Judgement[1].gameObject.SetActive(true) ) ); sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Judgement[2].gameObject.SetActive(true) ) ); sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Judgement[3].gameObject.SetActive(true) ) ); sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Judgement[4].gameObject.SetActive(true) ) ); for (int i = 0; i < 5; i++) { sequence.Insert(3f + 0.25f * i, Judgement[i].DOLocalMoveX(180f - i * 20f, 0.5f).SetEase(Ease.OutQuint) ); } //Score sequence.Insert(2.5f, DOVirtual.DelayedCall(0f, () => Score.gameObject.SetActive(true) ) ); sequence.Insert(4.5f, Score.DOLocalMoveX(250f, 1f).SetEase(Ease.OutQuint) ); int ScoreNumber = 0; sequence.Insert(5f, DOTween.To(() => ScoreNumber, (n) => ScoreNumber = n, ScoreValue, 1.5f) .OnUpdate(() => Score.Find("Score").GetComponent <TextMeshProUGUI>().text = LintNumber(7, ScoreNumber)) ); sequence.Insert(5f, DOVirtual.DelayedCall(0f, () => audioSource.PlayOneShot(audioSource.clip) ) ); sequence.Insert(5.5f, DOVirtual.DelayedCall(0f, () => { Score.Find("ScorePercentage").GetComponent <Text>().text = ((int)ScorePercentage).ToString() + "%"; if (CurrentHighscore < ScoreValue) { NewRecord.gameObject.SetActive(true); } } ) ); int ComboNumber = 0; sequence.Insert(5.25f, DOTween.To(() => ComboNumber, (n) => ComboNumber = n, ComboValue, 1f) .OnUpdate(() => Score.Find("Combo").GetComponent <TextMeshProUGUI>().text = LintNumber(4, ComboNumber)) ); sequence.Insert(5.5f, DOVirtual.DelayedCall(0f, () => { Score.Find("ComboPercentage").GetComponent <Text>().text = ((int)ComboPercentage).ToString() + "%"; } ) ); //Rank sequence.Insert(5.5f, DOTween.ToAlpha(() => RankImage.color, color => RankImage.color = color, 1f, 0.5f ).SetEase(Ease.OutQuint) ); sequence.Insert(5.5f, Rank.DOScale(new Vector3(1f, 1f, 1f), 0.5f).SetEase(Ease.OutQuint) ); //Finish sequence.Insert(7f, DOTween.ToAlpha(() => PressButton.color, color => PressButton.color = color, 1f, 0.5f ).SetEase(Ease.OutQuint) ); sequence.Insert(7f, DOVirtual.DelayedCall(0f, () => flag = true ) ); if (!DebugMode) { float timeDelay = 0.5f; GameObject[] changer = new GameObject[4]; RectTransform[] rectTran = new RectTransform[4]; for (int i = 0; i < 4; i++) { changer[i] = GameObject.Find("SceneChangeEnd").transform.Find(i.ToString()).gameObject; rectTran[i] = changer[i].GetComponent <RectTransform>(); } sceneChangeTween = DOTween.Sequence(); for (int i = 0; i < 4; i++) { sceneChangeTween.Insert(1 + 0.25f * (3 - i), rectTran[i].DOLocalMoveX(-1280, timeDelay).SetEase(Ease.OutQuint) ); } sceneChangeTween.Join( DOVirtual.DelayedCall(6f, () => { Destroy(SceneChange); sequence.Play(); }) ); } }