unity案例入門(一)(拾取游戲)


1. 案例簡述

這個案例實現一個非常簡單的拾取寶物游戲,主角是一個小球,玩家通過鍵盤控制小球拾取全部寶物。

2. 鍵盤控制物體移動

private Rigidbody rd;
public int force = 10;

void Start () {
	rd = GetComponent<Rigidbody> ();//獲得物體的剛體組件
}

void Update () {
	float h = Input.GetAxis ("Horizontal");//獲得虛擬軸橫向移動距離
	float v = Input.GetAxis ("Vertical");//獲得虛擬軸縱向移動距離
	rd.AddForce (new Vector3(h, 0, v) * force);//對物體施加力的作用
}

3. 控制相機跟隨物體移動

public Transform playerTransform;//需要跟隨的物體
private Vector3 offset;//物體與攝像機的位置偏移量

void Start () {
	offset = transform.position - playerTransform.position;
}

void Update () {
	transform.position = playerTransform.position + offset;
}

首先記錄相機與需要跟隨的物體的position偏移量,而后讓攝像機位置通過偏移量實時改變。

4. 使寶物自己旋轉

void Update () {
	transform.Rotate (new Vector3(0, 1, 0), Space.World);
}

Update()方法每秒大約執行60次,根據這個調節旋轉速度。

5. 碰撞檢測撿起物體

void OnCollisionEnter(Collision collision){
	if (collision.collider.tag == "Food") {
		Destroy (collision.collider.gameObject);
	}
}

相對而言,碰撞檢測雖然也能實現拾取物體的功能,但是通過碰撞檢測拾取物體,會在拾取的同時發生碰撞,這是顯然不合理的,因此撿起物體通常通過下面的觸發檢測實現。

6. 觸發檢測撿起物體

void OnTriggerEnter(Collider collider){
	if (collider.tag == "Food") {
		Destroy (collider.gameObject);
	}
}

觸發檢測的使用方法與碰撞檢測非常相似。使用時需在相應物體的碰撞器組件欄中勾選isTrigger選項。

7. 初步使用GUI顯示分數與勝利宣言

private int score = 0;
public Text text;
public GameObject winText;

void OnTriggerEnter(Collider collider){
	if (collider.tag == "Food") {
		score++;
		text.text = "Score: " + score.ToString ();
		if (score == 11) {
			winText.SetActive (true);
		}
		Destroy (collider.gameObject);
	}
}

細心的朋友可能會發現,同是文字對象,但是顯示分數與勝利宣言的對象分別用了Text和GameObject類型。這是因為,記錄分數的text我們只需要更改其顯示內容,即只對它的text組件進行操作,因此只需要獲得它的text組件;而winText不同,我們需要它在游戲勝利時顯示出來,也就是控制整一個對象,因此需要獲得整一個GameObject。

案例下載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM