Question by
alexdewilde · Sep 30, 2016 at 06:31 PM ·
coroutineaddforce
Burst Fire?
When he spawns he shoots 2 bullets at once and never again.
using UnityEngine; using System.Collections;
public class BossScript : MonoBehaviour {
public float max_health = 20;
public float health = 0;
public GameObject bar;
public Transform[] waypoint;
int cur = 0;
public float speed = 0.06f;
//public Transform Followplatform;
public GameObject Enemykogel;
public float fireRate = 0.5f;
private float nextFire = 0.0f;
public Rigidbody2D rb2;
// Use this for initialization
void Start () {
rb2 = GetComponent<Rigidbody2D>();
health = max_health;
//InvokeRepeating ("decreasMyHealth", 1f, 0.3f);
Invoke ("FireEnemyBullet", 1f);
}
public void addScore(int newScoreValue){
}
// Update is called once per frame
void Update () {
//GameObject Player = GameObject.FindGameObjectWithTag ("Player");
//transform.position = new Vector3 (Player.transform.position.x, 7, 0);
//als levens(health) op is
if (transform.position != waypoint [cur].position) {
Vector3 p = Vector3.MoveTowards (transform.position, waypoint [cur].position, speed);
GetComponent<Rigidbody2D> ().MovePosition (p);
}
else {
cur = (cur + 1) % waypoint.Length;
}
if (health <= 0) {
//wordt game opject vernietigd
Destroy (gameObject);
}
if (Time.time > nextFire) {
nextFire = Time.time + fireRate;
//GameObject clone = Instantiate (Enemykogel, transform.position, transform.rotation)as GameObject;
Invoke ("FireEnemyBullet", 1f);
}
}
void fixedUpdate ()
{
}
//bij een botsing met een ander object
void OnTriggerEnter2D(Collider2D other)
{
//als het andere object getagd is met "bullet"
if (other.gameObject.tag == "bullet")
{
//gebruik levens afneem functie(decreasMyHealth)
decreasMyHealth();
}
}
public void decreasMyHealth(){
health--;
//Health calculator for UI img
float calc_health = health/max_health;//if health is 80 / 100 = 0.8f
//print(health/max_health);
setHealthBar(calc_health);
}
public void setHealthBar(float myHealth){
//hier wordt de maat(breedte) van het groene bra object aangepast met de data van decreaseMyHealth
bar.transform.localScale = new Vector3 (myHealth, bar.transform.localScale.y, bar.transform.localScale.z);
}
void FireEnemyBullet(){
GameObject Vliegtuig = GameObject.Find ("Vliegtuig");
if (Vliegtuig != null)
{
GameObject bullet = (GameObject)Instantiate (Enemykogel);
bullet.transform.position = transform.position;
Vector2 direction = Vliegtuig.transform.position - bullet.transform.position;
bullet.GetComponent<Enemykogel> ().SetDirection (direction);
}
}
public IEnumerator FireBurst(GameObject bulletPrefab, int burstSize, float rateOfFire)
{
float bulletDelay = 10 / rateOfFire;
// rate of fire in weapons is in rounds per minute (RPM), therefore we should calculate how much time passes before firing a new round in the same burst.
for (int i = 0; i < burstSize; i++)
{
GameObject bullet = (GameObject)Instantiate(Enemykogel); // It would be wise to use the gun barrel's position and rotation to align the bullet to.
rb2.AddForce(bullet.transform.forward * 4000); // add some force to your bullet's rigidbody to make it go forward
yield return new WaitForSeconds(bulletDelay); // wait till the next round
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Problem with changing value in coroutine 0 Answers
Reference coroutine from another script 2 Answers
How to make pause beetwen action 0 Answers
Problem with coroutine / create a gap of 5 seconds [C#] 1 Answer
My Coroutine Ignores the Boolean 1 Answer