《杜增強講Unity之Tanks坦克大戰》6-發射子彈


6 發射子彈

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

 
image

首先,發射子彈得確定發射的位置和方向,還有發射的初始速度.具體的發射速度和按下發射按鍵的時間長短有關,這個關於子彈的蓄力我們在第九小節中會講到.

首先我們在Tank上添加一個空物體,命名為FirePosition,設置Position為(0,1.7,1.35),

Rotation為(350,0,0)

 
image

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

 
image

首先我們是在按下開火鍵的時候發射子彈的,所以我們在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.

 
image

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


免責聲明!

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



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