1、關於情境,即scene。
一個正常的遊戲至少要有三個情境,即菜單(或者目錄)情境、遊戲關卡情境、遊戲結束情境。它們一般統一放在project目錄下scene目錄(自己建立)中,方便管理。
1.1情境切換要實現遊戲的正常進行,需要情境的切換。比如,從開始菜單如何進入到遊戲中。
開始菜單
關卡畫面
這些需要兩步準備:1、設定
要將情境放在托放在所示位置,做好標記。
2、相關代碼編寫
//材質public Texture startButton;public Texture rankButton;void OnGUI(){//開始菜單,開始遊戲,rect前一定要有new,且rect參數為位置左、上,按鈕大小if (GUI.Button (new Rect (100, 250, 135, 75), startButton)) {Application.LoadLevel("Start");}GUI.Button(new Rect(460, 250, 135, 75), rankButton);if (GUI.Button (new Rect (20, 20, 60, 30), "exit")) {Application.Quit();}}
情境切換要用到函數Application.LoadLevel("Start"),Start是要切換情境的名稱,當然這裡也可以用數字1來代替,因為中地Start的標號就是1。
情境的切換一般是伴隨著事件的發生,上面是由於發生了點擊按鈕(startButton)的事件才引起情境切換。
注意
if (GUI.Button (new Rect (100, 250, 135, 75), startButton)){}用於判斷是否點擊按鈕,
而GUI.Button (new Rect (100, 250, 135, 75), startButton);則是產生按鈕。
1.2什麼導致切換
一般而言,有點擊按鈕、另外一些觸發器、碰撞器也能導致切換(暫時學到這裡)
//小鳥與管道碰撞則遊戲結束void OnCollisionEnter(Collision other){if(other.gameObject.tag == "Player"){GameManager._intance.GameState=GameManager.GAMESTATE_END;audio.Play();Application.LoadLevel("End");if(other.gameObject.tag == "projectile"){}}}
OnCollisionEnter(Collision c)函數用於檢測碰撞器發生反應,類似的有OnCollisionStay、OnCollisionExit,分別表示剛接觸碰撞器、處於碰撞器中、離開碰撞器,這樣就能根據情況作出相應的判斷。這裡小鳥、管道都是碰撞器(好像至少有一個必須加剛體組件rigidbody),當他們碰撞時,作出相應反應:1、首先判斷是什麼碰撞管道(代碼屬於管道的部分),就需要用到tag,用於區分對象。
2、之後進行相關處理,這裡audio.play用於播放音樂,需要事先要在管道上添加組件audioSource,並綁定音樂(因為代碼是屬於管道)。LoadLevel()y切換情境。
2、物體移動1、小鳥的移動
bird有剛體組件如
public void getLife(){rigidbody.useGravity=true;this.rigidbody.velocity = new Vector3(2,0,0);}
初始時沒有重力(因為這裡設定剛進入遊戲時小鳥沒有動作,點擊滑鼠後才啟用),getlife函數的rigidbody.useGravity=true使小鳥開啟了重力,之後的this.rigidbody.velocity = new Vector3(2,0,0);給了它水平(x軸)方向的初速度。velocity描述角色當前的相對速度。
<pre name="code" class="csharp">//上跳void birdJump(){if(Input.GetMouseButton(0) ){// left mouse button downaudio.Play();Vector3 vel2 = this.rigidbody.velocity;this.rigidbody.velocity = new Vector3(vel2.x,5,vel2.z);}}
左鍵按下實現上跳,首先獲得當前速度,然後改變y方向(實際情況各不相同)的速度,實現向上的動作。
這樣結合上面的代碼就能實現小鳥的運動。
2、水平移動的實現
void Update () {//根據分數來決定子彈的出現if (GameManager._intance.score >= minScore) renderer.enabled = true;float outToMove = speed * Time.deltaTime;transform.Translate(Vector3.up*outToMove); //重新出現if (transform.position.x <= (birdTransform.position.x-2.0f)) {setPosition();}}
float outToMove = speed * Time.deltaTime;transform.Translate(Vector3.up*outToMove);
這兩行代碼實現某一軸方向的物體的移動,具體的查資料吧。