1. 程式人生 > >Unity3D 太空射擊遊戲學習筆記

Unity3D 太空射擊遊戲學習筆記

Unity4.3遊戲開發專案實戰(龔老師編著)第二章太空射擊

1、攝像頭:透視投影Perspective和正交投影Orthographic的區別。這是個2D遊戲,所以選擇後者。

2、碰撞檢測:遊戲裡飛機發射子彈擊碎岩石,岩石撞碎飛機都需要用到碰撞檢測。

      碰撞檢測過程中需要為撞擊與被撞擊物體加上碰撞體。子彈使用膠囊碰撞體(CapsuleCollider),飛機和岩石使用立方體碰撞體(Box Collider),並且勾選Is Trigger選項。

      撞擊者(攻擊方)需要新增剛體(Rigidbody)。

      撞擊響應函式這裡使用的是void OnTriggerEnter(Collider other),其中用other.tag == "Player"(飛機的tag是Player)來判斷是否碰撞到了飛機,而projectile則是子彈。 

http://blog.csdn.net/Monzart7an/article/details/22739421這篇文章詳細分析了碰撞檢測。

3、動畫:岩石被擊碎和飛機爆炸都會有爆炸動畫。岩石爆炸總共有7幀影象,打包成一幅308*49的圖片。所以可以設定Tiling屬性的X=0.143表示只顯示原圖X軸的七分之一,而改變Offset中的X則可顯示不同幀畫面。這裡直接貼程式碼:

using UnityEngine;
using System.Collections;

public class ExplosionController : MonoBehaviour {

	public int index = 0;
	public int frameNumber = 7;

	float frameRate = 0;
	float myTime = 0;
	int myIndex = 0;

	// Use this for initialization
	void Start () {
		frameRate = 1.0f / frameNumber;	
	}
	
	// Update is called once per frame
	void Update () {
		myTime += Time.deltaTime;
		myIndex = (int)(myTime * frameNumber);
		index = myIndex % frameNumber;

		renderer.material.mainTextureScale = new Vector2 (frameRate, 1);
		renderer.material.mainTextureOffset = new Vector2 (index * frameRate, 0);

		if (index == frameNumber - 1) {
						Destroy (gameObject);
				}
	}
}

4、記錄最高分數:其實就是儲存和讀取一個變數到本地。這裡使用的是PlayerPrefs.SetInt("highScore")和PlayerPresf.GetInt("highScore")的方法,u3D會將變數名和值儲存為鍵值對的形式。

5、切換場景:首先定義不同的場景(New Scene),呼叫Application.LoadLevel("場景名”)。