如何讓鏡頭跟隨主角移動

在游戲制作中,如果游戲場景超出一個屏幕,就需要通過鏡頭移動來使角色重新回到屏幕當(dāng)中。 在本次教程中,我們將學(xué)習(xí)如何平滑移動鏡頭、以及如何控制鏡頭的移動邊界。
點我下載教學(xué)工程
點我下載教學(xué)素材
勾選不限邊界
要使鏡頭可以自由移動,需要解除游戲的邊界限制。
選擇目標(biāo)場景,在屬性中勾選不限邊界


創(chuàng)建鏡頭跟隨物體
一般來說,我們可以讓鏡頭跟隨玩家, 但是不同的游戲可能會出現(xiàn)讓鏡頭跟隨敵人這樣與玩家位置無關(guān)的鏡頭移動。
所以我們創(chuàng)建一個隱藏的鏡頭對象,讓鏡頭跟隨該對象,這樣如果希望鏡頭跟隨玩家,只需要讓鏡頭對象跟隨玩家,如果希望鏡頭跟隨敵人,就讓鏡頭對象跟隨敵人就好。

玩家不需要真正看見該對象,在場景開始時,將鏡頭對象的不透明度設(shè)為0.

添加背景圖
為了看出移動的效果,我們添加一張背景圖片。

實現(xiàn)鏡頭跟隨邏輯
如果要對某個物體進行鏡頭跟隨,可以在該對象身上添加鏡頭跟隨能力,本篇教程不使用這種方式,而是通過事件表來控制鏡頭移動。
使用系統(tǒng)組件提供的聚焦到某處

將鏡頭聚焦到鏡頭對象的位置上

創(chuàng)建玩家角色
為了看到效果,我們創(chuàng)建一個可移動的玩家角色,并讓鏡頭對象始終跟隨

添加八方向運動能力(加速度設(shè)置的很大可以讓玩家立刻到達最大速度,去掉了加速的過程)

使鏡頭對象的坐標(biāo)始終與玩家保持一致

在完成以上操作后,預(yù)覽游戲,鏡頭即可跟隨玩家的移動而移動。

鏡頭的平滑跟隨
雖然上述操作可以實現(xiàn)鏡頭的跟隨,但是由于我們直接將聚焦的坐標(biāo)設(shè)置到鏡頭對象上,所以會使鏡頭跟隨效果顯得很生硬。下面我們針對聚焦事件進行改良,使鏡頭平滑的移動到鏡頭對象上,而不是立刻移動過去。
要實現(xiàn)平滑移動效果,我們需要用到lerp(a,b,c)表達式。

將聚焦位置從?鏡頭對象.x?改成?lerp(scrollx,鏡頭對象.x,dt*5)?。 Y坐標(biāo)同理
scrollx和scrolly表達式用于獲取當(dāng)前聚焦位置的坐標(biāo)。 dt*x可以理解為鏡頭平滑移動的速度。 x的值越大,鏡頭移動的越快。

改良事件后,預(yù)覽游戲可以看到,鏡頭雖然跟隨玩家,但是速度上會慢一拍,需要等待一小段時間才會到達玩家位置。
設(shè)置鏡頭移動邊界
雖然我們實現(xiàn)了鏡頭的平滑移動,但是上述事件會讓玩家始終處于鏡頭的中心位置。 在一些有場景邊界的游戲中,例如馬里奧,玩家在最左側(cè)或最右側(cè)時,鏡頭是不會跟隨玩家的。因為,下面我們要給鏡頭移動增加限制
創(chuàng)建限制邊界對象
為了更方便的設(shè)置鏡頭移動邊界,我們創(chuàng)建4個鏡頭邊界對象,并分別設(shè)置錨點到邊緣位置




將4個鏡頭邊界對象拖入場景


需要注意的是,鏡頭的最小邊界為窗口大小,也就是上圖中的虛線部分。上下左右4個邊界對象不能放錯方向。例如,鏡頭邊界_上必須放置在鏡頭邊界_下的上方
根據(jù)鏡頭邊界改良鏡頭跟隨邏輯
我們使用clamp(x,min,man)表達式來限制鏡頭移動的范圍。
具體寫法:
X:clamp(lerp(scrollx,鏡頭對象.X,dt5),鏡頭邊界_左.x+(originalviewportwidth/2),鏡頭邊界_右.x-(originalviewportwidth/2))
Y: clamp(lerp(scrolly,鏡頭對象.Y,dt5),鏡頭邊界_上.y+(originalviewportheight/2),鏡頭邊界_下.y-(originalviewportheight/2))


在完成上面的操作后,預(yù)覽游戲可以看到,鏡頭只會在鏡頭邊界內(nèi)進行跟隨
想要更改鏡頭邊界的范圍,只需拖動4個邊界對象即可(每個鏡頭邊界只管理一個方向,鏡頭邊界_上的X方向不影響效果,只需關(guān)注Y坐標(biāo)即可)

以上便是鏡頭控制的教程,重點是lerp和clamp表達式的運用。您可以自行更改參數(shù),調(diào)整鏡頭跟隨速度或更改鏡頭跟隨的角色。