2017-04-06 71 views
2

我在Unity製作射擊遊戲。我想推遲拍攝腳本,但現在我的代碼似乎沒有工作。任何線索我如何解決這個問題?除了延遲功能,一切正常。Unity射擊腳本延遲不起作用

下面是代碼:

#pragma strict 

private var player   : GameObject; 
public var speed   : float; 
private var bulletCounter : int; 
var reloadtime : float = 2; 
private var reloadTimer: float = 0.0; 

function Start() { 
    player = this.gameObject; 
} 

function Update() { 
    if (reloadTimer > 0){ 
     reloadTimer -= Time.deltaTime; 
     if (reloadTimer <= 0){ 
      if(Input.GetKey("space")) { 
       Shoot(); 
      } 
     } 

     if(Input.GetKey("w")){ 
      if(player.transform.position.y < 20) { 
       player.transform.position.y += speed * Time.deltaTime; 
      } 
     } 
     if(Input.GetKey("s")){ 
      if(player.transform.position.y > -20) { 
       player.transform.position.y -= speed * Time.deltaTime; 
      } 
     } 
     if(Input.GetKey("a")){ 
      if(player.transform.position.x > -20) { 
       player.transform.position.x -= speed * Time.deltaTime; 
      } 
     } 
     if(Input.GetKey("d")){ 
      if(player.transform.position.x < 20) { 
       player.transform.position.x += speed * Time.deltaTime; 
      } 
     } 

    } 
    function Shoot() { 
     bulletCounter++; 
     var bullet = GameObject.CreatePrimitive(PrimitiveType.Cube); 
     bullet.transform.position = player.transform.position; 
     bullet.AddComponent.<BulletScript>(); 
     bullet.name = "Bullet"+bulletCounter.ToString(); 
     var audio : AudioSource = GetComponent.<AudioSource>(); 
     audio.Play(); 
     reloadTimer = reloadtime; 
    } 
} 
+0

好問題!我與Spacebear項目有同樣的問題,我希望你能得到一個驚人的解決方案! – Nieck

回答

0

我認爲你的想法是不太清楚。最簡單的方法就是這樣。

function Shoot() { 
    ... 
    reloadTimer = Time.time + reloadtime; 
} 

如果看起來應該是這樣

if (reloadTimer >= Time.time){ 
     if(Input.GetKey("space")) { 
      Shoot(); 
     } 
    } 
1

你需要得到移動代碼(W,S,A,d)的定時器條件之外 -

#pragma strict 
private var player   : GameObject; 
public var speed   : float; 
private var bulletCounter : int; 
var reloadtime : float = 2; 
private var reloadTimer: float = 0.0; 
function Start() { 
    player = this.gameObject; 
} 
function Update() { 
    if (reloadTimer > 0){ 
     reloadTimer -= Time.deltaTime; 
     if (reloadTimer <= 0){ 
      if(Input.GetKey("space")) { 
       Shoot(); 
      } 
     } 
    } 
    /********* Move this outside the timer condition *********/ 
    if(Input.GetKey("w")){ 
     if(player.transform.position.y < 20) { 
      player.transform.position.y += speed * Time.deltaTime; 
     } 
    } 
    if(Input.GetKey("s")){ 
     if(player.transform.position.y > -20) { 
      player.transform.position.y -= speed * Time.deltaTime; 
     } 
    } 
    if(Input.GetKey("a")){ 
     if(player.transform.position.x > -20) { 
      player.transform.position.x -= speed * Time.deltaTime; 
     } 
    } 
    if(Input.GetKey("d")){ 
     if(player.transform.position.x < 20) { 
      player.transform.position.x += speed * Time.deltaTime; 
     } 
    } 
    function Shoot() { 
     bulletCounter++; 
     var bullet = GameObject.CreatePrimitive(PrimitiveType.Cube); 
     bullet.transform.position = player.transform.position; 
     bullet.AddComponent.<BulletScript>(); 
     bullet.name = "Bullet"+bulletCounter.ToString(); 
     var audio : AudioSource = GetComponent.<AudioSource>(); 
     audio.Play(); 
     reloadTimer = reloadtime; 
    } 
} 

這將保持在等待期間(重新加載時間)在玩家射擊之後啓用移動。