![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICOycTN1cDM2EjNwMDM1EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
在寫腳本之前,我先上個圖把背景中的物體結構表達清楚一下
我覺得圖檔應該表達清楚了,要提示一點,這個GameObject物體的位置要自己把握好,不然遊戲效果有點差。
好了,這次要寫的腳本是放在這個GameObject物體下的,記住GameObject是空物體,然後給他一個碰撞器勾選IsTriger成為觸發器(不知道說法對不對。。。),然後我們把背景1的預制物體的改動apply一下,讓該背景1這個物體的改動應用到背景2,背景3,背景4上。
MoveTarget.cs
using UnityEngine;
using System.Collections;
public class MoveTarget : MonoBehaviour {
public Transform currentBackGround;
public Pipe pipe1;//Pipe.cs腳本的引用,下面再提
public Pipe pipe2;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnTriggerEnter(Collider gameObject)
{
if (gameObject.tag == "Player")
{
Transform firstBackGround = GameManager.gameInstance.firstBackGround;
currentBackGround.position = new Vector3(firstBackGround.position.x + , currentBackGround.position.y, currentBackGround.position.z);
GameManager.gameInstance.firstBackGround = currentBackGround;
pipe1.RundomPosition();
pipe2.RundomPosition();
}
}
}
好了,這樣就能在小鳥接觸到背景1的GameObject物體後讓背景1移動到背景4後面,然後當接觸到背景2的GameObject物體後讓背景2又移動到移動後的背景1的後面,如此循環,代碼很清楚,不多做解釋。
然而這裡多了調用了一個方法
這是幹什麼的呢?
首先我們想象,一開始的4個背景的上下管道的位置是固定一樣的吧,遊戲當然不能這樣,我們得讓上下管道的位置在遊戲進行時改變才能增加遊戲的那個什麼趣味性吧?(請允許我用這個詞。。。想不到詞了)
首先,我們得吧PipeUp和PipeDown放到共同的一個空物體下,也就是說成為該空物體的子物體,這個空物體就是上圖中的Pipe1和Pipe2了,so,現在我們該解決問題了,給Pipe1和Pipe2(所有背景都要這樣操作哦,也就是上面紅色物體的apply一下),當然你最好都看一下确定一下是不是都一樣。現在呢,我們寫一個腳本Pipe.cs,注意是給到每個上下管道上的父物體!
using UnityEngine;
using System.Collections;
public class Pipe : MonoBehaviour {
private float minPositionY = -f;//此處的最小值和下面的最大值自己去算啦 ,不解釋
private float maxPositionY = f;
public GameObject scores;//NGUI做的UI,暫時用不到,計分用
public void RundomPosition()
{
float positionY = Random.Range(minPositionY, maxPositionY);//随機數
this.transform.localPosition = new Vector3(this.transform.localPosition.x, positionY, this.transform.localPosition.z);
//注意因為Pipe1和Pipe2是背景的子物體,是以這裡是用localPosition!
//下面的可以先不了解,作用是每當小鳥飛過管道了,就加上一分,audio.Play()就是播放加分的音源了
void OnTriggerExit(Collider gameObject)
{
if(gameObject.tag=="Player")
{
audio.Play();
GameManager.gameInstance.currentScores++;
// Debug.Log(GameManager.gameInstance.currentScores);
scores.GetComponent<UILabel>().text = GameManager.gameInstance.currentScores + "";
}
}
}
寫完這兩個腳本後,背景的無限延伸就實作了。