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。