About a variable for speed

Hello,
On this example, there is a script called Gun.cs.

using UnityEngine;
using System.Collections;

public class Gun : MonoBehaviour
{
    public Rigidbody2D rocket;                // Prefab of the rocket.
    public float speed = 300f;                // The speed the rocket will fire at.


    private PlayerControl playerCtrl;        // Reference to the PlayerControl script.
    private Animator anim;                    // Reference to the Animator component.


    void Awake()
    {
        // Setting up the references.
        anim = transform.root.gameObject.GetComponent<Animator>();
        playerCtrl = transform.root.GetComponent<PlayerControl>();
    }


    void Update ()
    {
        // If the fire button is pressed...
        if(Input.GetButtonDown("Fire1"))
        {
            // ... set the animator Shoot trigger parameter and play the audioclip.
            anim.SetTrigger("Shoot");
            GetComponent<AudioSource>().Play();

            // If the player is facing right...
            if(playerCtrl.facingRight)
            {
                // ... instantiate the rocket facing right and set it's velocity to the right.
                Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,0))) as Rigidbody2D;
                bulletInstance.velocity = new Vector2(speed, 0);
            }
            else
            {
                // Otherwise instantiate the rocket facing left and set it's velocity to the left.
                Rigidbody2D bulletInstance = Instantiate(rocket, transform.position, Quaternion.Euler(new Vector3(0,0,180f))) as Rigidbody2D;
                bulletInstance.velocity = new Vector2(-speed, 0);
            }
        }
    }
}

The problem is that when I change the speed at line 7, nothing happens. But when I multiply the speed variable at lines 36 and 42, the rockets speed changes. I’m new to Unity and I can’t understand this. Please help.

Try modifying the ‘speed’ value in the inspector. The inspector will override the code.

mathos5k is correct.

When you set an initial value for a public variable, it will be set as such when you add the script to an object.
If you change this value in the script, it will not modify the values of the scripts already attached to game objects.

When you modify the multiplier on lines 36 and 42, that happens at run time, so it will affect all scripts.

Thank you people. But I have a question - why changing the code isn’t helping? Why it doesn’t have any effect at the runtime? What is the reason? And is there any more stuff like this?

could you try not using a Vector2 and use a Vector3? im not a professional, im a beginner, so i don’t know much, id yuor game 2D or 3D? if it’s 3d then try making it vector3, also instead if using velocity, you could try using rigidbody.addforce()

like this:

Rigidbody rb;

void start(){
rb = getComponent();
}

rb.addForce(your stuff here, see the unity documentation for more info: Unity - Scripting API: Rigidbody.AddForce);

for the speed, you could do rb.addforce(your direction here * speed), Thanks!