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ù)自己需要自行修改。