- Home /
Help with creating a projectile based on Fixed Vector movement
Hi, I have a problem that I cannot seem to find an answer to.
Basically, I am creating a 3D game that uses 2D sprites for main characters and enemys. In order for me to do this, I need to ensure that my Plane is always facing the camera to map a sprite to it.
This means that I have prevented the object from rotating, and I move the object based on the following simple script.
// Control the Players movement
if (Input.GetKey(playerControls.playerOneControlUp))
{
transform.position += new Vector3(0, 0, 0.035f * playerAttributes.playerOneBaseMoveSpeed) * Time.deltaTime;
}
if (Input.GetKey(playerControls.playerOneControlDown))
{
transform.position -= new Vector3(0, 0, 0.035f * playerAttributes.playerOneBaseMoveSpeed) * Time.deltaTime;
}
if (Input.GetKey(playerControls.playerOneControlRight))
{
transform.position += new Vector3(0.035f * playerAttributes.playerOneBaseMoveSpeed, 0, 0) * Time.deltaTime;
}
if (Input.GetKey(playerControls.playerOneControlLeft))
{
transform.position -= new Vector3(0.035f * playerAttributes.playerOneBaseMoveSpeed, 0, 0) * Time.deltaTime;
}
However, I am now at the point of creating the fireball function of the main player, but I have no idea how to make the fireball emit in the direction that the player is currently moving (or has just moved in, in case he is motionless).
I am starting working with this simple script
if (Input.GetKeyDown(KeyCode.Q))
{
GameObject theFireball = Instantiate(fireball, transform.position, transform.rotation) as GameObject;
theFireball.rigidbody.AddForce(transform.forward * 100);
}
This of course will not work as the players forward is always facing the camera.
Also, I have the other slight issue that the object being instantiated is created inside the player and therefore add's force to the player, so I need to create just in front of the players direction.
I hope that makes sense?
Could anyone help me with this?
Answer by robertbu · Jul 13, 2014 at 06:36 PM
In order to generate a vector for your AddForce, you need to save a previous position. You can fix the problem with your object interacting with the player using Physics.IgnoreCollision(). The logic will be something like this:
private Vector3 prevPosition;
public GameObject fireball;
void Update () {
if (Input.GetKeyDown(KeyCode.Q)) {
GameObject theFireball = Instantiate(fireball, transform.position, transform.rotation) as GameObject;
Vector3 dir = (transform.position - prevPosition).normalized;
theFireball.rigidbody.AddForce(dir * 100);
Physics.IgnoreCollision (collider, theFireball.collider);
}
prevPosition = transform.position;
// Your movement code goes here
}
Your answer
Follow this Question
Related Questions
Problem with ScreenToWorldPoint and touches (C#) 2 Answers
what to put in vector3 when instantiating Gameobject at Gameobject? 2 Answers
Need help instantiating enemies between random locations 1 Answer
Instantiate object basics (Unity 3.2, C#) 1 Answer
Position an instantiated prefab relative to its translation vector 2 Answers