菜鸡一个,喜欢自己做点什么,代码不规范还请见谅。
素材文件可以自己解决,不如说如果不是为了发行的话自己ps画着玩就好。
首先确定需要的组件有哪些,这里简单列一下,如果还有要补充的会在之后的文章里补。
NoteItem组件、Button组件、Effect组件(最重要的三个)
NoteCreate组件、NotePool组件(负责控制Note的生成和资源池调用)
音乐播放由Audio Listener和Audio Source来负责,这个地方要注意,Listener通常在主摄像机中自带,不要删除,Source建议新建一个空物体来添加,方便单独管理。
NoteItem是Note的对象组件,应当包含Note的属性,比如在哪条轨道,还有其在乐曲中的时间点,以及在Loading时计算下落开始的时间点。同时还要判断Note打击的时机,并控制Note打击效果的显示,如Perfect、Good、Bad、Miss。
NoteItem中还有下落动作函数,根据每个Note的时间来控制什么时候显示并开始下落。
NoteCreate是Note的创造组件,里面有一个NoteList,负责Loading时根据歌曲Note文件初始化好Note,并将List返回。
NotePool是Note的资源池组件,负责从NoteCreate拿到返回的NoteList。这里资源池的大小因为Note下落速度的不同实际上不好确定,比如当一倍速下落时屏幕上有七八十个Note同时存在,这也有可能。所以我这里直接设定下落速度是三倍速,让谱面表现的好一些,同时节省一下资源,如果有变速的需要可以在资源池资源不足时Instantiate一个新的Note出来并塞进资源池里,动态扩展就好。
Button组件实际上控制的是Button的按下与计时,并全局传递给屏幕中所有的Note,让它们得以判断时间并控制打击效果。同时还控制了按键按下后的特效,比如按键是否有背景特效,或者按键对应的轨道上的判定线是否有特效亮起。
Effect组件要控制的实际上并不多,包含BGA的播放(如果有的话)、Combo数的计算与显示、分数的计算与显示。(会不会命名成Rank_n_Combo更好点...)