Firing Projectiles in the same direction as my character is looking.

Hello Internet!,
I’ve searched through a bunch of posts on Top Down 2D rotation with firing missiles and none of them apply to mine.

My Wizard manages to fire his magicmissiles from his wand but they come out unaligned with his wands direction.
(Image showing missiles going in odd directions)
It should be taking the Z value from the Quaternion of the wand and assigning that as the angle it goes out in ( or atleast thats what i believe it should be doing) But it seems to rotate faster than the wand and whilst it does change if I spin it isn’t changing equally with the wand. So whilst if I point up it will fire up. If i point 45 degrees right of that it fires the missile directly into my wizard.

The Code for the MissileMovement ---------------

using UnityEngine;
using System.Collections;

public class MoveMissile : MonoBehaviour {

	// Use this for initialization

	public float speed = 0.5F;
	public Transform Shotspawn; // <-- Set to Wand2
	// public Quaternion Direction;
	private	float Direction;
	void Start (){

		// Sets the direction that shot is fired in.
	    Direction = transform.rotation.eulerAngles.z;
		transform.Rotate(0 , 0, Direction);
	}
	
	// Update is called once per frame
	void Update () {
	

		transform.Translate(Vector2.up * speed);
	}
}

The Code for the Character Movement ---------------------------

using UnityEngine;
using System.Collections;

public class TopDownCharController2 : MonoBehaviour {

	// Movement Variables
	public float walkSpeed;
	public bool colliding; 

	// Use this for initialization
	void Start () {

	}



	// Update is called once per frame
	void Update ()
	{

			if(Input.GetKey (KeyCode.I)) 
			{transform.Translate(Vector2.up * walkSpeed); } // UP MOVEMENT
			
			if(Input.GetKey(KeyCode.J)) 
			{transform.Translate(-Vector2.right * walkSpeed); } // LEFT MOVEMENT
			
			if(Input.GetKey(KeyCode.K)) 
			{transform.Translate(-Vector2.up * walkSpeed); }// DOWN MOVEMENT
			
			if(Input.GetKey(KeyCode.L)) 
			{transform.Translate(Vector2.right * walkSpeed); }// RIGHT MOVEMENT
			
			if(Input.GetKey(KeyCode.U)) {
				// Clockwise
				transform.Rotate(0, 0, -3.0f);
			}
			if(Input.GetKey(KeyCode.O)) {
				// Counter-clockwise
				transform.Rotate(0, 0, 3.0f); 

				
			}
		}		     
	}

I just don’t understand what is causing it. If anyone is able to explain where i’m going wrong that would be extremely helpful :smiley:

I can’t tell without the script that spawns the missles. However the way you set the direction of the shot in the shot script

Direction = transform.rotation.eulerAngles.z;
transform.Rotate(0 , 0, Direction);

reads the transformation in the shot script and then rotates the shot even more. This should probably be

transform.rotation=Shotspawn.rotation;