67 lines
1.8 KiB
C#
Raw Normal View History

using System.Collections;
using UnityEngine;
using UnityEngine.Serialization;
public class KitchenGun : MonoBehaviour
{
// The shot projectiles
public GameObject projectilePrefab;
// Time between shots, game needs to be restarted to take effect
public float shotIntervalSeconds = 1f;
// Time alive for the projectiles
public float shotAliveSeconds = 1f;
// Time until collider gets enabled
public float colliderDisabledSeconds = .2f;
// Speed of projectiles
public Vector2 shotSpeed = new Vector2(1f, 0f);
// Smallest step size for shot speed
private short shotSpeedStepSize = 50;
// Start is called before the first frame update
void Start()
{
InvokeRepeating("RecurringBang",0f,shotIntervalSeconds);
}
// Update is called once per frame
void Update()
{
}
void RecurringBang()
{
StartCoroutine("Bang");
}
private IEnumerator Bang()
{
Transform t = transform;
Vector3 position = t.position;
// create projectile
GameObject projectile = Instantiate(projectilePrefab,
position,
t.rotation);
// determine correct force vector
Vector2 force = shotSpeed;
if (t.localScale.x < 0) {
force *= -1;
}
force *= shotSpeedStepSize;
// add force to projectile
projectile.GetComponent<Rigidbody2D>().AddRelativeForce(force);
// wait until enabling collider
yield return new WaitForSeconds(colliderDisabledSeconds);
projectile.GetComponent<Collider2D>().enabled = true;
// wait given time before destroying
yield return new WaitForSeconds(shotAliveSeconds);
Destroy(projectile);
}
}