關(guān)于跳躍手感的解決
角色跳躍功能一直是RPG游戲的核心玩法,不同機(jī)器每秒的執(zhí)行幀數(shù)是不相同的,配置越高的機(jī)器每秒執(zhí)行的幀數(shù)越高。在Unity中,為了兼容不同配置的機(jī)器,提供了兩個(gè)函數(shù)Updata和FixedUpdata。Updata函數(shù)每一幀被調(diào)用一次,這也就導(dǎo)致了低配機(jī)器每秒的調(diào)用次數(shù)不足,使得操作不靈敏。FixedUpdata固定每0.02秒執(zhí)行一次,可以很好的兼顧各種配置的機(jī)器。這樣就引出了一個(gè)常用的解決辦法,雖然低配機(jī)器Updata執(zhí)行次數(shù)不足,但是不是固定執(zhí)行,所以Updata函數(shù)中可以馬上獲得玩家按下按鍵的操作。Unity手冊(cè)中也明確指出了Input.GetButton和Input.GetButtonDown這類有關(guān)于按鍵檢測(cè)的函數(shù)需要放在Updata中去執(zhí)行,這樣能夠得到實(shí)時(shí)的反饋。而所有與物理效果有關(guān)的仿真模擬需要放在FixedUpdata中執(zhí)行,因?yàn)槲矬w移動(dòng)需要持續(xù)穩(wěn)定的推力,對(duì)執(zhí)行頻率更加敏感,所以在這個(gè)項(xiàng)目中,需要先在Updata中獲得按鍵信息,再去FixedUpdata中執(zhí)行代碼,以此獲得較好的跳躍手感。例如:
Update()
{
????? if(Input.GetButtonDown("Jump"))
????????????jumpPressed = true;
}
FixedUpdate()
{
???????if(jumpPressed = true)
????????????DoubleJump();
}
這樣當(dāng)玩家按下跳躍鍵時(shí),先會(huì)執(zhí)行Updata獲取已經(jīng)按下跳躍鍵的信息,然后固定執(zhí)行FixedUpdata,達(dá)到幾乎無(wú)延遲的跳躍效果。這也是實(shí)現(xiàn)幀同步的關(guān)鍵步驟。但是這個(gè)方案也并不完美,因接收頻率過高或者過低時(shí),固定執(zhí)行的FixedUpdata可能會(huì)出現(xiàn)響應(yīng)多次或者響應(yīng)過少的情況,本人做到這一步已經(jīng)完美解決跳躍手感問題,故沒有進(jìn)行下一步研究改進(jìn)。