Unity 如何讓相機(jī)平滑跟隨角色

1.關(guān)于相機(jī)

1.相機(jī)跟隨
第一步:找一個(gè)舒服的視角,將相機(jī)視野對(duì)準(zhǔn)視角 (view to algin)
第二步:相機(jī)添加腳本
第三步:利用相機(jī)與玩家位置的偏移量

offset = transform.position - player_transform.position

第四步:將相機(jī)位置設(shè)置為玩家位置加上offset

transform.position  = player_transform.position + offset

注意點(diǎn):四步完成可以簡(jiǎn)單實(shí)現(xiàn)相機(jī)跟隨
第一,遇到死角遮擋。第二,某些時(shí)刻滑動(dòng)會(huì)有卡頓,用戶體驗(yàn)不好
有以下的解決方式
首先,我們看一張圖

分析圖.png

  • 我們模擬出這么一種情況,玩家走到墻角,如圖所示,被墻擋住攝像機(jī),那我們就看不見我們的角色了。
  • 我們的解決方案就是,利用攝像機(jī)向角色發(fā)射射線,再利用角色的垂直方向,得出相機(jī)需要運(yùn)動(dòng)的方向,同時(shí)在運(yùn)動(dòng)方向截取3個(gè)點(diǎn),在3個(gè)點(diǎn)同時(shí)發(fā)射射線,判斷是不是射線與角色產(chǎn)生碰撞。如果射線并沒有與角色碰撞,而是與其他物體碰撞,那么可以判斷為,該攝像機(jī)位置被遮擋,我們就將攝像機(jī)按順序往后移動(dòng)。最壞的結(jié)果就是攝像機(jī)移動(dòng)角色垂直方向,如圖中攝像機(jī)2的位置。這樣就可以在死角也能夠看到角色。

技術(shù)要點(diǎn)

1.均勻取射線點(diǎn),用到以下方法

Vector3.Lerp();

2.發(fā)射射線

RayCastHit hitInfo;
if (Physics.RayCast(...,...,out hitInfo)){
    //do some thing
}

完成這些后還不夠,因?yàn)橐苿?dòng)相機(jī),會(huì)卡頓,體驗(yàn)極其不友好,所以這里需要用到部分插值運(yùn)算。
以下是緩動(dòng)代碼部分

        transform.position = Vector3.Lerp(transform.position, newPos, Time.deltaTime * moveSpeed);
        Quaternion oldRotation = transform.rotation;
        transform.LookAt(player_transform.position);
        transform.rotation = Quaternion.Lerp(oldRotation, transform.rotation, Time.deltaTime * rotateSpeed);

至此,攝像機(jī)腳本初步完成,有些地方,根據(jù)自己需要自行修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容