private void createBeatObject(bool aTriplet = false) { if (mBeatObject != null) { mBeatObject.delete(); } mBeatObject = MyBehaviour.createObjectFromPrefab <MyBehaviour>("score/" + (aTriplet ? "beatTriplet" : "beat")); mBeatObject.transform.parent = this.gameObject.transform; mBeatObject.transform.localPosition = new Vector3(0, 0, 0); mBeatObject.transform.localScale = new Vector3(1, 1, 1); //配列初期化 if (aTriplet) { mNotes = new Note[3]; mLyricses = new LyricsBubble[3]; mBpms = new ChangeBpmObject[3]; } else { mNotes = new Note[4]; mLyricses = new LyricsBubble[4]; mBpms = new ChangeBpmObject[4]; } //behaviour取得 mNotePositions = mBeatObject.findChild("notes").GetComponent <MyBehaviour>().GetComponentsInChildrenWithoutSelf <Transform>(); mLyricsPositions = mBeatObject.findChild("lyricses").GetComponent <MyBehaviour>().GetComponentsInChildrenWithoutSelf <Transform>(); mBpmPositions = mBeatObject.findChild("bpms").GetComponent <MyBehaviour>().GetComponentsInChildrenWithoutSelf <Transform>(); sendTimeToColliders(); }
//小節生成 private Bar createBar(KeyTime aBarNum) { Bar tBar = MyBehaviour.createObjectFromPrefab <Bar>("score/bar" + MusicScoreData.mRhythm.ToString()); tBar.mTime = aBarNum; //音符追加 List <Arg> tNotes = MusicScoreData.getNotesInBar(aBarNum); foreach (Arg tNoteData in tNotes) { tBar.addNote(tNoteData); } //歌詞追加 List <Arg> tLyrics = MusicScoreData.getLyricsInBar(aBarNum); foreach (Arg tLyricsData in tLyrics) { tBar.addLyrics(tLyricsData); } //bpm変化を示すオブジェクト追加 List <Arg> tBpms = MusicScoreData.getChangeBpmInBar(aBarNum); foreach (Arg tBpm in tBpms) { tBar.addChangeBpm(tBpm); } //位置調整 tBar.transform.parent = gameObject.transform; tBar.transform.localPosition = new Vector3(0, convertToPositionY(tBar.mTime.mBarNum), 0); tBar.transform.localScale = new Vector3(1f, 1f, 1f); tBar.name = "bar:" + aBarNum.mBarNum; return(tBar); }
//要素生成 public override MyScrollViewElement createElement(int aIndex) { MusicListFileData.MusicListElement tData = new MusicListFileData.MusicListElement(mList[aIndex]); ScoreItem tItem = (aIndex < MusicList.mLength) ? MyBehaviour.createObjectFromPrefab <ScoreItem>("ui/item/scoreItem") : MyBehaviour.createObjectFromPrefab <ScoreItem>("ui/item/scoreItemUn"); tItem.set(tData.title, new Arg(new Dictionary <string, object>() { { "file", tData.file } })); return(tItem.GetComponent <MyScrollViewElement>()); }
//曲名のラベル生成 private MusicLabel createLabel(int aNum) { MusicLabel tLabel = MyBehaviour.createObjectFromPrefab <MusicLabel>("selection/musicLabel"); tLabel.name = "musicLabel:" + aNum; tLabel.mNum = aNum; tLabel.setLabel(MusicList.get(aNum).title); tLabel.transform.parent = gameObject.transform; tLabel.positionY = -aNum; return(tLabel); }
//警告文表示 static public AlartWindow alart(string aText) { //前回の警告文がまだ表示されている場合は消す if (mLastCreated != null) { mLastCreated.delete(); } //ウィンドウ生成 AlartWindow tWindow = MyBehaviour.createObjectFromPrefab <AlartWindow>("ui/alartWindow"); mLastCreated = tWindow; tWindow.set(aText); return(tWindow); }
//bpm変化を示すオブジェクト追加 public void addChangeBpm(Arg aBpmData) { //オブジェクト生成 ChangeBpmObject tObject = MyBehaviour.createObjectFromPrefab <ChangeBpmObject>("score/changeBpmObject"); tObject.setData(aBpmData); KeyTime tTime = new KeyTime(aBpmData.get <float>("time")); //三連符判定 checkTriplet(tTime.mIsInTriplet); //座標 tObject.transform.parent = mBpmPositions[(mTriplet) ? tTime.mQuarterBeatNumInTriplet : (int)tTime.mQuarterBeatInBeat]; tObject.transform.localPosition = new Vector3(0, 0, -1); mBpms[tTime.mQuarterBeatIndexInBeat] = tObject; }
//歌詞追加 public void addLyrics(Arg aLyricsData) { //歌詞生成 LyricsBubble tLyrics = MyBehaviour.createObjectFromPrefab <LyricsBubble>("score/lyricsBubble"); tLyrics.setData(aLyricsData); KeyTime tTime = aLyricsData.get <KeyTime>("keyTime"); //三連符判定 checkTriplet(tTime.mIsInTriplet); //座標 tLyrics.transform.parent = mLyricsPositions[(mTriplet) ? tTime.mQuarterBeatNumInTriplet : (int)tTime.mQuarterBeatInBeat]; tLyrics.transform.localPosition = new Vector3(0, 0, -1); mLyricses[tTime.mQuarterBeatIndexInBeat] = tLyrics; }
static public Note create() { switch (MusicScoreData.mSelectedDifficult) { case ScoreDifficult.child: return(MyBehaviour.createObjectFromPrefab <NoteChild>("score/note/noteChild")); case ScoreDifficult.student: return(MyBehaviour.createObjectFromPrefab <NoteStudent>("score/note/noteStudent")); case ScoreDifficult.scholar: return(MyBehaviour.createObjectFromPrefab <NoteScholar>("score/note/noteScholar")); case ScoreDifficult.guru: return(MyBehaviour.createObjectFromPrefab <NoteGuru>("score/note/noteGuru")); case ScoreDifficult.edit: return(MyBehaviour.createObjectFromPrefab <NoteEdit>("score/note/noteEdit")); default: throw new Exception("Note : 未定義の難易度「" + MusicScoreData.mSelectedDifficult + "」"); } }
//理想のタイミングとの差の表示 protected void displayTimeDifference(Note aNote, float aDifference) { TextMesh tText = MyBehaviour.createObjectFromPrefab <TextMesh>("score/parts/evaluationDifference"); MyBehaviour tBehaviour = tText.GetComponent <MyBehaviour>(); tText.name = "timeDifference"; //テキスト設定 double tDifference = Math.Round(Mathf.Abs(aDifference), 2); if (tDifference == 0) { tText.text = "just"; tText.color = new Color(0, 1, 0); } else if (aDifference < 0) { tText.text = "-" + tDifference.ToString(); tText.color = new Color(0, 0, 1); } else if (aDifference > 0) { tText.text = "+" + tDifference.ToString(); tText.color = new Color(1, 0, 0); } //表示位置調整 tBehaviour.transform.parent = parent.mScore.transform; tBehaviour.transform.localScale = new Vector3(1.7f, 1.7f, 1); tBehaviour.transform.localPosition = new Vector3(0, 0, 0); tBehaviour.transform.Translate(aNote.transform.position - parent.mScore.transform.position); tBehaviour.positionZ = -2; tBehaviour.positionY -= 1.5f; //削除 tBehaviour.setTimeout(2, () => { tBehaviour.delete(); }); }