Move the projectile correctly

I am making a 2D laser defender game in unity 5.5.
My projectile’s rotation is ok but the movement of it is not. It has to go in a straight line according to the angle of the projectile.

here is an image

projectile code

using UnityEngine;
using System.Collections;

public class Projectile : MonoBehaviour {

	public float damage = 100f;

	public float GetDamage(){
		return damage;
	}

	public void Hit(){
		Destroy (gameObject);
	}
}

player controller

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class playerControler : MonoBehaviour {

	public GameObject projectile;
	public GameObject projectile_2;
	public GameObject projectile_3;
	public GameObject player;
	public static float speed = 15.0f;
	public float projectile_Speed;
	public float firingRate = 0.2f;



	public float lives = 3f;
	public float health = 500f;
	Vector3 offset;

	float AngleBetweenTwoPoints(Vector3 a, Vector3 b){
		return Mathf.Atan2 (a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
	}

	void fireProjectile_red (){	
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);

		Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = Instantiate (projectile, startPos, Quaternion.Euler (new Vector3 (0f,0f,angle))) as GameObject;
		beam.GetComponent<Rigidbody2D> ().velocity = new Vector3 (0,projectile_Speed,0);
		//beam.transform.Translate(transform.right * Time.deltaTime * speed);
	}

	void fireProjectile_blue (){	
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);
		
		Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = Instantiate (projectile_3, startPos, Quaternion.Euler (new Vector3 (0f,0f,angle))) as GameObject;
		beam.GetComponent<Rigidbody2D> ().velocity = new Vector3 (0,projectile_Speed,0);

	}

	void fireProjectile_green (){	
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);

		Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = Instantiate (projectile_2, startPos, Quaternion.Euler (new Vector3 (0f,0f,angle))) as GameObject;
		beam.GetComponent<Rigidbody2D> ().velocity = new Vector3 (0,projectile_Speed,0);

	}

	void Update () {
		
		if (Input.GetMouseButtonDown(0)){
			InvokeRepeating ("fireProjectile_red", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(0)){
			CancelInvoke ("fireProjectile_red");
		} 

		if (Input.GetMouseButtonDown(1)){
			InvokeRepeating ("fireProjectile_green", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(1)){
			CancelInvoke ("fireProjectile_green");
		}

		if (Input.GetMouseButtonDown(2)){
			InvokeRepeating ("fireProjectile_blue", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(2)){
			CancelInvoke ("fireProjectile_blue");
		}

		if (health <= 0){
			health = 250;
		}

		rotateThePlayer ();

	}

	void rotateThePlayer(){
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);
		transform.rotation = Quaternion.Euler (new Vector3 (0f,0f,angle));
	}

	void OnTriggerEnter2D(Collider2D collider){		
		Projectile missile = collider.gameObject.GetComponent<Projectile> ();
		if (missile){
			health -= missile.GetDamage ();
			missile.Hit();
			if (health <= 0 && lives >= 0) {
				lives -= 1;
			} else if (lives <= 0) {
				die ();
			}
		}
	}

	void die (){
		LevelManager man = GameObject.Find ("LevelManager").GetComponent<LevelManager> ();
		man.LoadLevel ("end");	
		Destroy (gameObject);
	}


}

It doesn’t look like you adjusting your projectile speed anywhere. You’re just give them a y velocity like veugeljame pointed out. Just do (VectorA - VectorB).Normalize() * projectileSpeed;

or veugeljame suggested, since you’re already applying the angle, use the projectile.tranform.forward * projectileSpeed; the forward is already normalized.

also you should try to minimalize your code so that you only have to change 1 thing to change all things related:

	void fireProjectile (ProjectileColor color){    
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);

		//Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = null;
		switch (color) {
		case ProjectileColor.Red:
			beam = Instantiate(projectile);
			break;
		case ProjectileColor.Green:
			beam = Instantiate(projectile_2);
			break;
		case ProjectileColor.Blue:
			beam = Instantiate(projectile_3);
			break;
		}
		beam.transform.rotation = Quaternion.Euler(new Vector3 (0, 0, angle));
		beam.transform.position = transform.position + beam.transform.forward;
		beam.GetComponent<Rigidbody2D>().velocity = beam.transform.forward * projectile_speed;
	}

	enum ProjectileColor {
		Red, Blue, Green
	}

ps: are you setting your projectile_speed somewhere? and I moved your start position after the angle assignment so that it comes out in the direction its going not just y… may or may not want that, not sure.

Thanks till now malkere, but my projectiles are still not firing. I used the same code which u gave. I saved some parts of my old code by keeping it in comments.

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class playerControler : MonoBehaviour {

	enum ProjectileColor {
		Red, Blue, Green
	}

	public GameObject projectile_red;
	public GameObject projectile_blue;
	public GameObject projectile_green;
	public GameObject player;
	public static float speed = 15.0f;
	public float projectile_Speed;
	public float firingRate = 0.2f;

	public float lives = 3f;
	public float health = 500f;
	Vector3 offset;
	float FireTimer = 0;
	float AngleBetweenTwoPoints(Vector3 a, Vector3 b){
		return Mathf.Atan2 (a.y - b.y, a.x - b.x) * Mathf.Rad2Deg;
	}
	/*
	void fireProjectile_green (){	
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);

		Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = Instantiate (projectile_green, startPos, Quaternion.Euler (new Vector3 (0f,0f,angle))) as GameObject;
		beam.GetComponent<Rigidbody2D>().velocity = beam.transform.forward * projectile_Speed;

	}*/

	void fireProjectile (ProjectileColor color){    
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);

		//Vector3 startPos = transform.position + new Vector3 (0f, 0.75f);
		GameObject beam = null;
		switch (color) {
		case ProjectileColor.Red:
			beam = Instantiate(projectile_red);
			break;
		case ProjectileColor.Green:
			beam = Instantiate(projectile_blue);
			break;
		case ProjectileColor.Blue:
			beam = Instantiate(projectile_green);
			break;
		}
		beam.transform.rotation = Quaternion.Euler(new Vector3 (0, 0, angle));
		beam.transform.position = transform.position + beam.transform.forward;
		beam.GetComponent<Rigidbody2D>().velocity = beam.transform.forward * projectile_Speed;
	}

	void Update () {
		/*
		 // fire red
		if (Input.GetMouseButtonDown(0)){
			InvokeRepeating ("fireProjectile_red", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(0)){
			CancelInvoke ("fireProjectile_red");
		} 
		// fire green
		if (Input.GetMouseButtonDown(1)){
			InvokeRepeating ("fireProjectile_green", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(1)){
			CancelInvoke ("fireProjectile_green");
		}
		// fire blue
		if (Input.GetMouseButtonDown(2)){
			InvokeRepeating ("fireProjectile_blue", 0.001f, firingRate);
		}
		if (Input.GetMouseButtonUp(2)){
			CancelInvoke ("fireProjectile_blue");
		}*/

		if (FireTimer > 0) {
			FireTimer -= Time.deltaTime;
		}
		if (Input.GetMouseButtonDown (0) && Input.GetMouseButtonDown (1) && Input.GetMouseButtonDown (2) && FireTimer == 0 ) {
			fireProjectile (ProjectileColor.Red);
			FireTimer += 0.2f;
		}

		if (health <= 0){
			health = 250;
		}

		rotateThePlayer ();

	}

	void rotateThePlayer(){
		Vector2 positionOnScreen = Camera.main.WorldToViewportPoint (transform.position);
		Vector2 mouseOnScreen = (Vector2)Camera.main.ScreenToViewportPoint (Input.mousePosition);
		float angle = AngleBetweenTwoPoints (positionOnScreen, mouseOnScreen);
		transform.rotation = Quaternion.Euler (new Vector3 (0f,0f,angle));
	}

	void OnTriggerEnter2D(Collider2D collider){		
		Projectile missile = collider.gameObject.GetComponent<Projectile> ();
		if (missile){
			health -= missile.GetDamage ();
			missile.Hit();
			if (health <= 0 && lives >= 0) {
				lives -= 1;
			} else if (lives <= 0) {
				die ();
			}
		}
	}

	void die (){
		LevelManager man = GameObject.Find ("LevelManager").GetComponent<LevelManager> ();
		man.LoadLevel ("end");	
		Destroy (gameObject);
	}


}