音ゲー作る際json形式で値を読み込んでテンポ(timing)と位置(type)で管理しようとしたのですが、一般的にbpm?というもので管理するのが良いのでしょうか?
現在はjsonで取得したタイミングの値をDOTweenで遅延処理をしてインスタンスを作成してボタンを出現させていますが、この方法だと処理として悪いのでしょうか?
解答よろしくおねがいします。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5using DG.Tweening; 6using System; 7 8 9 10public class GameManager : MonoBehaviour 11{ 12 public GameObject Touch_Button; 13 public GameObject ButtonCanvas; 14 public GameObject Touch_Button_on; 15 16 public AudioClip PlayMusic; 17 18 private AudioSource audioSource; 19 20 GameObject[] Button_Array = new GameObject[16]; 21 [SerializeField] string FileName; 22 23 int count = 0; 24 25 // Start is called before the first frame update 26 void Start() 27 { 28 29 audioSource = gameObject.GetComponent<AudioSource>(); 30 31 float button_width = Touch_Button.GetComponent<RectTransform>().sizeDelta.x; 32 float button_height = Touch_Button.GetComponent<RectTransform>().sizeDelta.y; 33 34 35 36 for (int i = 0; i < 4; i++) 37 { 38 for (int x = 0; x < 4; x++) 39 { 40 //インスタンスを作成してButtonCanvasの子にする 41 GameObject button_prefab = Instantiate(Touch_Button, new Vector3(-381 + (x * (button_width + 2)), -552 + (i * (button_height + 2)), 0), Quaternion.identity); 42 button_prefab.transform.SetParent(ButtonCanvas.transform, false); 43 Button_Array[count] = button_prefab; 44 count++; 45 // Debug.Log(button_prefab.transform.localPosition.x); 46 47 } 48 } 49 50 51 52 loadChart(); 53 54 55 56 57 58 59 } 60 61 62 // Update is called once per frame 63 void Update() 64 { 65 66 } 67 void loadChart() 68 { 69 70 audioSource.PlayOneShot(PlayMusic); 71 72 73 // 入力ファイルはAssets/Resources/FileNameのjson 74 75 // FileNameをテキストファイルとして読み取り、string型で受け取る 76 string inputString = Resources.Load<TextAsset>(FileName).ToString(); 77 78 79 // 上で作成したクラスへデシリアライズ 80 MusicJson musicJson = JsonUtility.FromJson<MusicJson>(inputString); 81 MusicArray musictArray = JsonUtility.FromJson<MusicArray>(inputString); 82 GameObject Note; 83 84 85 int type_num = 0; 86 for (int i = 0; i < musictArray.notes.Length; i++) 87 { 88 DOVirtual.DelayedCall(musictArray.notes[i].timing, () => 89 { 90 //インスタンス作成 91 Note = Instantiate(Touch_Button_on, new Vector3(Button_Array[musictArray.notes[type_num].type].transform.localPosition.x, Button_Array[musictArray.notes[type_num].type].transform.localPosition.y, 0), Quaternion.identity); 92 Note.transform.SetParent(ButtonCanvas.transform, false); 93 Note.SetActive(true); 94 type_num++; 95 // こちらに実行する処理 96 } 97 ); 98 99 } 100 101 102 //Debug.Log(musicJson.title); 103 } 104} 105 106 107 108 109 110 111[Serializable] 112public class MusicArray 113{ 114 public MusicJson[] notes; 115} 116 117[Serializable] 118public class MusicJson 119{ 120 public string title; 121 public float timing; 122 public int type; 123} 124 125 126
json
1{ 2 "title": "music01", 3 "bpm": "163", 4 "notes": [ 5 {"timing": "1.5f", "type": "0"}, 6 {"timing": "2.5f", "type": "2"}, 7 {"timing": "3.5f", "type": "3"}, 8 {"timing": "4.5f", "type": "4"}, 9 {"timing": "5.5f", "type": "5"}, 10 {"timing": "6.5f", "type": "7"}, 11 {"timing": "7.5f", "type": "9"} 12 ] 13}
イメージとしてjubeatという音ゲーのようなものを作成したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 16:56
2020/06/24 00:51
2020/06/24 04:32