- Home /
Bullet Script
Hello guys im making a bullet script but i got some errors.They say my gameObject (bullet) cant be coroutine.Heres my script
var prefabBullet:Transform;
var shootForce:float;
var shots : int = 0;
var maxShots : int = 8;
var shootSound : AudioClip;
function Update()
{
if(Input.GetButtonDown("Fire1") && shots < maxShots)
{
var instanceBullet = Instantiate(prefabBullet, transform.position, Quaternion.identity);
instanceBullet.rigidbody.AddForce(transform.forward * shootForce);
audio.PlayOneShot(shootSound);
shots++;
yield WaitForSeconds(2);
Destroy (prefabBullet);
}
else if (shots >= maxShots && Input.GetKeyDown(KeyCode.R))
{
shots = 0;
}
}
You can't use yield in an Update thread. You must use it in a separate function.
Answer by AlphaSniper2001 · Mar 21, 2016 at 11:22 PM
Mosins and Garands use clips, most modern day guns use magazines.
You seriously joined Unity Answers just to post this on two questions asked years ago?
And bullets don't mysteriously get "instantiated" when you pull the trigger of a gun either.... or get "destroyed" after 2 seconds....
Don't necro old threads if you don' have anything of value to add.
Answer by JayOhhh · Jun 16, 2014 at 03:35 PM
Sorry my UnityScript is horrible. But the problem you are having is that you cannot use "Yield WaitForSeconds(2)" in an update function. You need to move it into a coroutine and call it separately.
Take a look over at a similar question I had, it might help:
http://answers.unity3d.com/questions/690943/shooting-bullets-onmousedrag-time-delay-issues.html
But basically, you want to move your Yield statement into an IEnumerator and perform your wait logic there.
var prefabBullet:Transform;
var shootForce:float;
var shots : int = 0;
var maxShots : int = 8;
var shootSound : AudioClip;
function Update()
{
if(Input.GetButtonDown("Fire1") && shots < maxShots)
{
var instanceBullet = Instantiate(prefabBullet, transform.position, Quaternion.identity);
instanceBullet.rigidbody.AddForce(transform.forward * shootForce);
audio.PlayOneShot(shootSound);
shots++;
//yield WaitForSeconds(2); -- REMOVE THIS MOVE TO IENUM CALL COROUTINE
StartCoroutine(Wait());
//Destroy (prefabBullet); -- REMOVE THIS MOVE TO COROUTINE
}
else if (shots >= maxShots && Input.GetKeyDown(KeyCode.R))
{
shots = 0;
}
}
IEnumerator wait() {
return new Yield WaitForSeconds(2);
Destroy(prefabBullet);
{
Your answer
Follow this Question
Related Questions
The code is giving me errors 1 Answer
Enemy Instantiating one bullet 3 Answers
Why do I get error when using yield? 1 Answer
Shooting. Bullet floats and sprays 1 Answer
Troubles With A Shoot Script 1 Answer