- 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
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                