- Home /
Move prefab in the direction its facing (2D)
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?
Answer by starikcetin · Jul 03, 2015 at 01:15 AM
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 know this already but answer me this ins$$anonymous$$d GetComponent().AddForce(new Vector2(speed, //What is this value for));
@CubePhysics well... seems like you don't know them exactly. read what i wrote again and then make comments please.
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.
Answer by jprocha101 · Jul 03, 2015 at 01:20 PM
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.
Your answer
Follow this Question
Related Questions
Pysics not working as expected 1 Answer
torque speeding up when the game is unpaused 2 Answers
Vector rotation 1 Answer
2 fingers sprite rotation 1 Answer
Rotating Rigidbody properly using AddRelativeForce 0 Answers