如上圖:
有時候我們不希望攝像機在跟蹤角色的時候會跑到背景地圖之外的地方,這樣會給人一種穿幫的感覺。
我們或許只希望攝像機的左邊框移動到地圖的左邊緣處就停止跟蹤,也就是圖中粉色箭頭畫出的區域限制以內。
==========================后退!我要裝逼了!====================
我一貫用的辦法是這樣的:
1.在攝像機上添加一個BoxCollider2D組件,並且打鈎 ? Is Trigger 這一選項,然后編輯一下box的范圍,使其盡量跟攝像機邊緣對其,其實這個box什么用都沒有,不執行任何的碰撞檢測,目的只是為了通過BoxCollider2D組件的bounds.size.x屬性÷2得到攝像機長度的一半。
2.接下來我們需要獲得地圖最左邊和最右邊的點的位置,跟攝像機一樣,也是用BoxCollider2D組件,這樣就能通過BoxCollider2D.bounds.min.x和max.x獲得地圖左右兩邊的X坐標了。
3.獲得角色的x坐標,transform.position.x就可以直接拿到了。
4.開始邏輯的計算,邏輯上是這樣實現的:
1 if((角色當前的x坐標) > (地圖最左邊的點的x坐標 + 攝像機box的半徑) && (角色當前的x坐標) < (地圖最右邊的點的x坐標 - 攝像機box的半徑)){ 2 攝像機.transform.position = Vector3.Lerp(攝像機.transform.position,角色.transform.position,float); 3 } 4 else 5 if((角色當前的x坐標) <= (地圖最左邊的點的x坐標 + 攝像機box的半徑)){ 6 攝像機.transform.position = Vector3.Lerp(攝像機當前坐標,地圖最左邊的點的x坐標 + 攝像機box半徑,float); 7 } 8 else 9 if((角色當前的x坐標) >= (地圖最右邊的點的x坐標 - 攝像機box的半徑)){ 10 攝像機.transform.position = Vector3.Lerp(攝像機當前坐標,地圖最右邊的點的x坐標 - 攝像機box半徑,float); 11 }
========================華麗的分割線====================
以上,就是實現攝像機區域限制的基本思路了。