2017-06-02 29 views
-1

我已經查看了代碼並嘗試了多次不同的方法,但我似乎無法使其工作。我如何限制實例化對象的數量?

它工作正常兩次,然後停止正常工作第三次。

我想每次都要實例化一個對象,但是第三次​​產生了30個,這是不好的。

我希望它每次產生1個對象。

所以我用這個腳本。

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Attack : MonoBehaviour { 
    public Transform playerPos = null; 
    private float playerDist; 
    private GameObject projectileEnemyClone; 
    public GameObject projectileEnemyPrefab; 

    private float kickBack = 10; 

    private Rigidbody rb; 

    private int bulletCount = 0; 

    private bool canshoot = true; 



    void Start() 
    { 
     rb = GetComponent<Rigidbody>(); 
    } 

    private void Shoot() 
    { 
     if (canshoot == true) 
     { 

      projectileEnemyClone = Instantiate(projectileEnemyPrefab, transform.position, Quaternion.identity) as GameObject; 

      canshoot = false; 
     } 



    } 

    private void Respawn() 
    { 
     canshoot = true; ; 
    } 
    private void ShootLeft() 
    { 
     Shoot(); 

     projectileEnemyClone.transform.position = new Vector3(transform.position.x - 1, transform.position.y, transform.position.z); 

     projectileEnemyClone.GetComponent<Rigidbody>().AddForce(transform.right * -10); 

     kickBack *= -1; 

     rb.AddForce(transform.right * kickBack); 



     Destroy(projectileEnemyClone, 1); 

     if (!canshoot) 
     { 
      Invoke("Respawn", 2); 
     } 





    } 

    private void ShootRight() 
    { 
     Shoot(); 


     projectileEnemyClone.transform.position = new Vector3(transform.position.x + 1, transform.position.y, transform.position.z); 
     projectileEnemyClone.GetComponent<Rigidbody>().AddForce(transform.right * 10); 



     rb.AddForce(transform.right * kickBack); 

     Destroy(projectileEnemyClone, 1); 

     Invoke("Respawn", 2); 




    } 




    void Update() { 
     playerDist = playerPos.position.x - transform.position.x; 




     if (playerDist <= (3) && playerDist >= (-3)) 

     { 


      if (playerDist < (0)) 
      { 



        Invoke("ShootLeft", 1); 

      } 
      else 
      { 


       Invoke("ShootRight", 1); 







      } 


     } 



    } 
} 
+1

創建一個計時器變量,它決定了攻擊的發生率,每次拍攝都會重置,並且在足夠的時間過後才允許再次拍攝。 – Serlite

+0

定義「每次」 – Hristo

回答

0

不要使用Invoke(),你應該創建一個控制你的Shoot()函數的計時器。

float shootCooldown = 0.1f; 
float shootTimer = 0; 
bool justShot = false; 

void Update() 
{ 
    if(!canShoot) 
    { 
     shootTimer += Time.deltaTime; 

     if(shootTimer >= shootCooldown) 
     { 
      shootTimer = 0; 
      canShoot = true; 
     } 
    }  
} 

void Shoot() 
{ 
    if(canShoot) 
    { 
     Shoot(); 
     canShoot = false; 
    } 
}