2D橫版遊戲中,背景是可以無限延續下去的。今天實現了一個比較簡陋的版本。
就當是學習下Unity中的指令碼編寫吧。
先設定兩個地面,視窗中顯示出來的,也就是玩家當前站著的地面,命名為leftGround,在右側緊挨著的就是rightGround了。
命名規則什麼的不要糾結,畢竟是測試。
另外,不需要刻意區分兩個地面誰是左誰是右。
移動規則:當玩家向右側移動的時候,2個地面都向左移動,移動的距離當然就是玩家的移動速度了。
以地面向右移動為例:當某個地面的x座標超過了螢幕中的x最大值時,這個地面就需要重設到最左側。
兩個地面的處理是一樣的。在移動過程中,兩個地面會有換位置的情況,所以,是無法區分誰左誰右的。
其實也沒必要。
然後就是編寫移動的控制指令碼了,指令碼是綁定在玩家身上的,畢竟移動的觸發是玩家發起的。
using UnityEngine;using System.Collections;public class SceneMove : MonoBehaviour {private bool m_bMove = false;//是否移動背景private bool m_bLeft = true;//true表示從右向左移動,人物則是向右移動public float m_Speed = 2.0f;//移動速度public tk2dTiledSprite m_GroundLeft; //左側地面public tk2dTiledSprite m_GroundRight;//右側地面private float m_fMinX = -13.2f;private float m_fMaxX = 13.2f;// Use this for initializationvoid Start () {}// Update is called once per framevoid Update () {if (Input.GetKeyDown (KeyCode.A)) {m_bLeft = false;m_bMove = true;} else if (Input.GetKeyDown (KeyCode.D)) {m_bLeft = true;m_bMove = true;}if (m_bMove) {MoveBackGround(Time.deltaTime);}}void MoveBackGround(float fDelta) {float fMoveSpeed = m_Speed * fDelta;if (m_bLeft) {m_GroundLeft.transform.Translate (Vector3.left * fMoveSpeed, Space.World); //向左移動m_GroundRight.transform.Translate (Vector3.left * fMoveSpeed, Space.World);if (m_GroundLeft.transform.localPosition.x <= m_fMinX) {m_GroundLeft.transform.localPosition = new Vector3(m_fMaxX, m_GroundLeft.transform.localPosition.y, m_GroundLeft.transform.localPosition.z);}if (m_GroundRight.transform.localPosition.x <= m_fMinX) {m_GroundRight.transform.localPosition = new Vector3(m_fMaxX, m_GroundRight.transform.localPosition.y, m_GroundRight.transform.localPosition.z);}} else {m_GroundLeft.transform.Translate(Vector3.right * fMoveSpeed, Space.World);m_GroundRight.transform.Translate(Vector3.right * fMoveSpeed, Space.World);if (m_GroundLeft.transform.localPosition.x >= m_fMaxX) {m_GroundLeft.transform.localPosition = new Vector3(m_fMinX, m_GroundLeft.transform.localPosition.y, m_GroundLeft.transform.localPosition.z);}if (m_GroundRight.transform.localPosition.x >= m_fMaxX) {m_GroundRight.transform.localPosition = new Vector3(m_fMinX, m_GroundRight.transform.localPosition.y, m_GroundRight.transform.localPosition.z);}}}}指令碼綁定到玩家身上後,需要設定如下:
運行遊戲,哈哈,沒問題。按A是玩家向左移動,按D是玩家向右移動。
注意:我這裡地面的圖片是很小的,所以我為了方便顯示,採用了tk2dTiledSprite,然後指令碼中的m_fMinX和m_fMaxX就是單個地面的縮放係數了。
現在還不知道怎麼在指令碼中擷取這兩個地面的對象。繼續學吧。