59 lines
1.5 KiB
C#
59 lines
1.5 KiB
C#
|
using System.Collections;
|
||
|
using UnityEngine;
|
||
|
|
||
|
public class KitchenGun : MonoBehaviour
|
||
|
{
|
||
|
// The shot projectiles
|
||
|
public GameObject projectilePrefab;
|
||
|
// Time between shots, game needs to be restarted to take effect
|
||
|
public float shotInterval = 1f;
|
||
|
// 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,shotInterval);
|
||
|
}
|
||
|
|
||
|
// 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
|
||
|
Rigidbody2D pBody = projectile.GetComponent<Rigidbody2D>();
|
||
|
pBody.AddRelativeForce(force);
|
||
|
|
||
|
yield return new WaitForSeconds(shotInterval);
|
||
|
Debug.Log("Bang!");
|
||
|
|
||
|
Destroy(projectile);
|
||
|
}
|
||
|
}
|