2015-08-28 17 views
0

我對Unity 5完全陌生,在使用教程中的代碼拍攝槍時遇到問題。這裏是我的代碼:Unity中單擊按鈕時發生太多事件(使用鼠標單擊複製子彈時)

static var ammo = 30; 

var key : String = "mouse 0"; 

var speed : float = 100; 

static var maxAmmo = 30; 

var bullet : Rigidbody; 

var dmg : float = 20; 


function Update() 
{ 
    if(Input.GetKeyDown(key)){ 

     if(ammo > 0){ 

      Shoot(); 
     } 
    } 
} 

function Shoot() { 
    var bullet1 : Rigidbody = Instantiate(bullet, transform.position, transform.rotation); 
    bullet1.AddForce(transform.forward * speed); 
    ammo --; 
} 

function OnGUI(){ 
    GUI.Label(Rect(10,10,500,500), ""+ammo); 
} 

function OnTriggerEnter(hit:Collider){ 
    if(hit.tag == "Enemy"){ 
     hit.transform.SendMessage("Damage",dmg); 
    } 
} 

當我運行這段代碼,子彈的克隆出現數倍(甚至高達8發子彈出現幾乎瞬間),來說明:

首先點擊 - >子彈(克隆)

下一頁點擊 - >子彈(克隆),子彈(克隆)(克隆)

下一個點擊 - >子彈(克隆),子彈(克隆)(克隆),子彈(克隆)(克隆)(克隆)

任何人都可以幫忙嗎?謝謝

+0

爲了澄清,您是否希望用鼠標單擊來觸發多個鏡頭,但速度較低,或者每次點擊鼠標只觸發一顆子彈? – Serlite

+0

你是說第一次點擊就得到一顆子彈,第二次點擊得到兩顆子彈等等? – user3071284

+0

我只需要每次點擊一次。 – Luke

回答

0

嗯看起來應該工作,但我從來沒有聽說過「鼠標0」作爲鍵碼。

試試這個

static var ammo = 30; 

var mouse : int = 0; 

var speed : float = 100; 

static var maxAmmo = 30; 

var bullet : Rigidbody; 

var dmg : float = 20; 


function Update() 
{ 
    if(Input.GetMousebuttonDown(mouse) && ammo > 0) 
     Shoot(); 
} 

function Shoot() { 
    var bullet1 : Rigidbody = Instantiate(bullet, transform.position, transform.rotation); 
    bullet1.AddForce(transform.forward * speed); 
    ammo --; 
} 

function OnGUI(){ 
    GUI.Label(Rect(10,10,500,500), ""+ammo); 
} 

function OnTriggerEnter(hit:Collider){ 
    if(hit.tag == "Enemy"){ 
     hit.transform.SendMessage("Damage",dmg); 
    } 
} 
+0

是的,不錯的代碼,但子彈射擊量從1,2,4,8,16等討厭它。也許它不是代碼? – Luke

+0

我只想每次都拍一拍 – Luke

0

好了,問題是,你是不是「等待」前執行下一次拍攝。 Update函數將在每秒鐘被調用幾次。所以,你可以拍攝,舉起一個標誌(iMShooting = true;),然後用協程在X秒後解鎖標誌。 此外,您的標誌iMShooting添加到您的更新功能。

var iMShooting : boolean = false; 

function Update() 
{ 
    if(Input.GetKeyDown(key) && ! iMShooting){ 

     if(ammo > 0){ 

     Shoot(); 
     } 
    } 
} 

function Shoot() { 
    iMShooting = true; 
    var bullet1 : Rigidbody = Instantiate(bullet, transform.position, transform.rotation); 
    bullet1.AddForce(transform.forward * speed); 
    ammo --; 
    StartCoroutine(shootingDone()); 

} 

你的協同程序應該是這樣的:

function shootingDone() 
{ 
    var waitTime : float = 0.5f; 
    yield WaitForSeconds (waitTime); 
    iMShooting = false; 
} 
+0

這不應該是必須的。 [根據文檔,'GetKeyDown'](http://docs.unity3d.com/ScriptReference/Input.GetKeyDown.html)僅對按下按鍵的框架有效。 – 31eee384

+0

哦,你是對的!一方面,國旗會避免額外的射擊,但另一方面不是正確的答案。 – mayo

+0

彈藥去29,27,23,15,0 – Luke

0

謝謝大家的幫助,但我實現了子彈的副本從子彈產卵自己,我意識到我把射擊腳本放在子彈上,所以子彈本身就像槍支一樣。我已經刪除了腳本,它完美的工作。謝謝您的幫助!