2016-01-20 59 views
1

我開始在Unity3d中製作一個簡單的遊戲:一個在牆上拍攝的坦克(見圖片)。坦克不拍攝實例化子彈

enter image description here

一個GameObject連接到坦克的炮塔,併爲此GameObject連接下面的腳本:

using UnityEngine; 
using System.Collections; 

public class Shooter : MonoBehaviour { 
    public Rigidbody bullet; 
    public float power = 1500f; 

    void Update() { 
     if (Input.GetButtonDown ("Fire1")) { 

      Rigidbody bulletRB = Instantiate (bullet, transform.position, transform.rotation) as Rigidbody; 
      Vector3 fwd = transform.TransformDirection(Vector3.forward); 
      bulletRB.AddForce(fwd*power); 
     } 
    } 
} 

當我按在FIRE1按鈕子彈不射。我在bulletRB.addForce()之後放置了(測試)Debug.Log("BULLET SHOOT")。該消息顯示,所以腳本達到了這一點。我的代碼有什麼問題?

+0

幾件事情首先,你看到的場景層次的子彈?在Awake中用Debug調試一個測試腳本,看它是否真的被創建。你可以在OnDestroy中放置另一個調試來查看它是否被破壞。你正在坦克位置創造子彈,也許它正在擊中某件東西並在它離開現場之前自行消滅。我會建議將一個遊戲物體放在槍口的末端,並將其附着在坦克上。您可以使用它的transform.forward作爲子彈方向。 – Everts

+0

在這裏,因爲我想看到一個坦克在牆上拍攝 – novice

+0

@fafase - 你的回答是ok.Tkx –

回答

0

根據Unity Answers上的this somewhat similar question,您應該直接實例化bullet預製/實例的GameObject,而不是其Rigidbody。然後,訪問該新子彈的Rigidbody組件並添加該力量。然後

您的調整Update()方法會是什麼樣子:(又名炮塔的前向矢量)

void Update() { 
    if (Input.GetButtonDown ("Fire1")) { 
     GameObject newBullet = Instantiate (bullet.gameObject, transform.position, transform.rotation) as GameObject; 

     RigidBody bulletRB = newBullet.GetComponent<Rigidbody>(); 
     Vector3 fwd = transform.TransformDirection(Vector3.forward); 
     bulletRB.AddForce(fwd*power); 
    } 
} 

你可能想使用transform.forward改變的另一件事,而不是Vector3.forward(全球前矢量Vector3(0, 0, 1),這可能不符合炮塔方向)。

希望這會有所幫助!如果您有任何問題,請告訴我。

+0

我解決了這個簡單的方法:我把射手腳本附加到大炮的孩子GObj。 Tkx的想法。 –

0

力只能應用於主動剛體。 如果GameObject處於非活動狀態,則AddForce不起作用。

默認喚醒Rigidbody。如果力大小爲零,那麼剛體不會被喚醒。

上面的描述是從Unity

採取因此,我建議,以檢查是否遊戲對象是第一活性。

您可以通過執行測試如下:

if (newBullet.activeInHierarchy === true) 
{ 
    //active 
}else{ 
    //inactive 
}