該插件主要用來做音遊,下面主要介紹一些API:
using SonicBloom.Koreo;
1.頭文件必不可少
Koreographer.Instance.RegisterForEventsWithTime(eventId, ChangeCubeScale);
void ChangeCubeScale(KoreographyEvent koreoEvent, int sampleTime, int sampleDelta, DeltaSlice deltaSlice)
float curveValue = koreoEvent.GetValueOfCurveAtTime(sampleTime);
Koreographer.Instance.RegisterForEvents(eventId, MyCallBack);
void MyCallBack(KoreographyEvent koreographyEvent)
2.首先Koregrapher類有一個單例,用來方便地調用其中的函數。
3.先看下面的兩句,第一個是就是用來處理事件的,即我們在軌道上添加事件後,當音樂播放到添加事件位置時會觸發相應的函數,即第二個參數;第一個參數即事件的Id,這個Id要和在Track上設置的Id相同,以便Koreographer插件能與遊戲物體建立連接
4.上面兩句同樣也是處理事件的,下面舉例說明其不同:
我們在一個事件還可以加Payload,如我們在一個事件上加一個Curve(曲線),曲線的橫座標便表示某個時間點,縱座標表示某個0-1之間的值,當我們想獲取某個時間點上曲線的值時便可以通過GetValueOfCurveAtTime(sampleTime)來獲得,至於爲什麼要獲得這個值,是因爲充分利用這個值可以將遊戲物體的變化與音樂節奏的變化關聯起來
particleSystem.Emit();
Koreographer.GetBeatTimeDelta();
5.第一個方法是用來控制粒子生成數目的,有一個參數,即表示生成粒子的數目;第二個方法表示在某一段時間中完成了一個拍子的多少(那個某一段時間是一個不固定的值,有點像deltaTime),也就是節拍時間(用節拍表示的時間)在某一個時間中的變化量
void ColorChange(KoreographyEvent koreographyEvent, int sampleTime, int sampleDelta, DeltaSlice deltaSlice)
{
if (koreographyEvent.HasColorPayload())
{
Color targetColor = koreographyEvent.GetColorValue();
ApplyColor(targetColor);
}
else if (koreographyEvent.HasGradientPayload())
{
Color targetColor = koreographyEvent.GetColorOfGradientAtTime(sampleTime);
ApplyColor(targetColor);
}
}
6.HasColorPayload()判斷當前事件有沒有顏色負載,同理稍作修改也可以檢查有無其它負載。GetColorValue()獲得當前事件上顏色負載的顏色。GetColorOfGradientAtTime(sampleTime)得到事件上漸變顏色負載在sampleTime時間點上的顏色
Koreographer.GetBeatTime()
Koreographer.GetBeatTime(null, 2)
7.第一個方法:獲得當前節拍時間(即用節拍表示的時間,因爲博主所用歌曲爲以4分音符爲一拍,所以這裏也可以理解爲用四分音符表示的時間)。第二個方法:與第一個方法相比,不同之處在於參數,第一個參數一般爲null(在使用多首歌曲時不爲空),第二個參數爲2表示四分音符的一半,也就是用八分音符表示的時間(是四分音符表示時間的兩倍)。注意這裏用節拍或者音符表示的時間是可以直接在編輯器界面看到的:
void ChangeText(KoreographyEvent koreographyEvent, int sampleTime, int sampleDelta, DeltaSlice deltaSlice)
koreographyEvent.StartSample
koreographyEvent.EndSample
8.分別是當前事件開始的時間和結束的時間