1. 程式人生 > >Unity例項.001無限滾動的背景

Unity例項.001無限滾動的背景

一些螢幕自動推進橫板跑酷類(如天天酷跑)、或者點選動作類遊戲(如Flappy Bird),遊戲背景是無限長的,像卷軸一樣緩緩展開,給玩家提供足夠的遊戲空間。這類遊戲的核心通常在於動作的挑戰,背景不是玩家關心的重點。下面具體來講解一下如何實現這種無限滾動的背景。 首先,我們要準備好2種以上的背景元件,這些背景元件最好有相同的尺寸大小;假設我們現在準備好了這三種類型的背景:背景A、背景B、背景C。 我們要實現的效果,就是讓A、B、C能夠橫著拼貼在一起,重複而迴圈進行顯示,它們之間不能出現縫隙,所以設計師在設計這些背景圖的時候注意要能保證圖片拼接的協調一致。 如何實現? 想象一下在具體的遊戲過程中,隨著我們操控角色的前進,畫面慢慢向後面展開,當前螢幕顯示的是背景A,後面緊跟著背景B和背景C,那麼經過背景C後,自然應該就是背景A重新出現。 一個簡單的實現方法就是,當玩家經過背景A,也就是背景A完全出現在螢幕外的時候,我們將背景A的座標位置移到緊貼著背景C的右邊即可。背景A移動的距離正好是3個背景的寬度總和。 如何判斷背景完全在螢幕外? 第一想法肯定是想到了攝像機,因為螢幕的展示是由攝像機決定了;而攝像機是跟隨著玩家控制的角色進行移動了,為了方便理解,我們可以將角色的座標X值等同於攝像機的座標X值
我們要考慮的是,當上圖的角色(黃色小星星)距離移動後的背景A的距離,比移動前的背景A的距離更近時,就可以進行背景A的移動。 也就是說,當角色的座標值,大於背景A的座標值加上三個背景總寬度的一半時,即可進行背景A的移動。 參考程式碼:
void Update()
{
     //背景全體(所有的模型並排)的寬度,背景寬度*背景數量
     float total_width = FloorControl.WIDTH*FloorControl.MODEL_NUM;
     // 背景的位置
     Vector3 floor_position = this.transform.position;
     // 攝像機的位置
     Vector3 camera_position = this.main_camera.transform.position;
     //攝像機座標的X值大於背景A座標的X值加上總背景長的一半時
     if(floor_position.x + total_width/2.0f < camera_position.x) {
     //移動背景A到背景C的右邊
     floor_position.x += total_width;
     this.transform.position = floor_position;
}