In my scene (2D game) I have an empty game object which rotation is always facing at the mouse. When the mouse is clicked it instantiates a prefab which shoots at 0 degrees. I want the prefab to move in the direction of the launcher (empty gameobject).
public class ProjectileBehaviour : MonoBehaviour {
public int speed;
public int lifeTime;
public GameObject Launcher; //Empty gameobject where the projectile is instantiated
void Update () {
Destroy(gameObject, lifeTime);
GetComponent<Rigidbody2D>().AddForce(new Vector2(speed,0));
}
}
I know i have to change the second vector2 value but i dont know what to change it to. Someone help me?
First of all, your question is a bit confusing actually.
transform.left gives you the +x axis in local space.
transform.up gives you the +y axis in local space.
transform.forward gives you the +z axis in local space.
You can get opposite axises by adding “-” before them like: -transform.left (this gives -x axis in local space).
As they are all unit vectors (a vector whose length equals 1 unit), you can simply multiplicate them with your speed value and get the final vector that you need to apply your object.
Best wishes.
I am not sure I completely understand the question, but it sounds like you have something like a turret that rotates, the view is from above, and you are trying to should a projectile in a given direction. If that is the case then you would want to calculate the direction the projectile needs to travel and apply force in that direction after normalizing it.
dir = target.transform.position - transform.position;
dir = dir.normalized;
GetComponent<Rigidbody2D>().AddForce(dir * speed);
You should also perform this on LateUpdate, that would make for better/more realistic physics in your game.