6 發射子彈
本節完成發射子彈的功能,最終代碼如下:

首先,發射子彈得確定發射的位置和方向,還有發射的初始速度.具體的發射速度和按下發射按鍵的時間長短有關,這個關於子彈的蓄力我們在第九小節中會講到.
首先我們在Tank上添加一個空物體,命名為FirePosition,設置Position為(0,1.7,1.35),
Rotation為(350,0,0)

在wm/Scripts中創建C#腳本Shooter.cs

首先我們是在按下開火鍵的時候發射子彈的,所以我們在Update()里面需要判斷開火鍵有沒有按下,因為兩個tank是不同的按鍵,所以我們需要區分一下當前是哪一個坦克
public int id = 1; // 坦克id
void Update () { if (Input.GetButtonDown ("Fire" + id)) { // 按下開火鍵 Fire ();// 發射子彈 } }
.
發射子彈的時候需要子彈的Prefab和發射位置.
public GameObject shellObject; // 子彈Prefab
public Transform firePosition; // 發射點
在真正發射子彈的Fire()函數里面,我們需要使用Instantiate方法來創建Shell的實例
GameObject go = Instantiate (shellObject, firePosition.position, firePosition.rotation ) as GameObject;
至於讓子彈發射出去,則可以通過直接設置剛體的速度來實現.
Rigidbody rb = go.GetComponent<Rigidbody> ();
if (rb) rb.velocity = firePosition.forward * 20;
發射子彈功能完整代碼如下:
Shooter.cs代碼:
using UnityEngine;
using System.Collections;
public class Shooter : MonoBehaviour {
public GameObject shellObject; // 子彈Prefab public Transform firePosition; // 發射點 public int id = 1; // 坦克id // Update is called once per frame void Update () { if (Input.GetButtonDown ("Fire" + id)) { // 按下開火鍵 Fire ();// 發射子彈 } } public void Fire(){ // 發射子彈 GameObject go = Instantiate (shellObject, firePosition.position, firePosition.rotation ) as GameObject; Rigidbody rb = go.GetComponent<Rigidbody> (); if (rb) rb.velocity = firePosition.forward * 20; }
}
然后回到Hierarchy里面,選中Tank,將Shooter掛載到上面,設置Shell預設體和發射點,保存Tank Prefab.

點擊Play運行游戲,實際效果如下.

---------------------------我是目錄分割線---------------------------
《杜增強講Unity之Tanks坦克大戰》4-坦克的移動和旋轉
《杜增強講Unity之Tanks坦克大戰》9-發射子彈時蓄力
《杜增強講Unity之Tanks坦克大戰》11-游戲流程控制
---------------------------我是目錄分割線---------------------------