The gist is I’m trying to fire a bullet on a mouse click, at the cursor.
The code i’m using is:
if(Input.GetMouseButtonDown(0)) {
Vector3 clickPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0);
GameObject projectile = Instantiate(bullet, transform.position, Quaternion.identity) as GameObject;
projectile.transform.LookAt(clickPosition);
projectile.GetComponent<Rigidbody>().velocity = projectile.transform.forward * BulletSpeed;
}
This takes place in a 3d environment played in 2d, so I only need the bullet to move along the x & y axes. The problem i’m having is if you imagine the screen as a plane, the bullet only ever travels in the first quadrant. If I fire to the left, the bullet travels almost straight up. If i fire downward the bullet travels directly right, If I shoot upwards it travels at near a 45 degree angle.
I’m sure I’m overlooking something simple, but I can’t seem to figure out what.
Thanks in advance!
So this is the method I am using. First I have the parent object turning towards the mouse cursor and then I simply spawn a bullet object facing that same direction, give it force forward, and then send it on its way.
using UnityEngine;
using Systems.Collections;
public class PlayerController : Monobehaviour
{
public float speed;
void FixedUpdate()
{
var mousePosition = Camera.main.ScreenToWorldPoint (Input.mousePosition);
Quaternion rot = Quaternion.LookRotation(transform.position - mousePosition, Vector3.forward);
transform.rotation = rot;
transform.eulerAngles = new Vector3(0, 0, transform.eulerAngles.z);
rigidbody2D.angularVelocity = 0;
float input = Input.GetAxis("Vertical");
rigidbody2D.AddForce(gameObject.transform.up * speed * input);
}
void Update()
{
if (Input.GetButtonDown("FIre1"))
{
Rigidbody2D clone = Instantiate(bullet, gun.transform.position, gun.transform.rotation);
clone.GetComponent<Rigidbody2D>().AddForce(transform.up * bulletSpeed); // Use transform.forward for 3D?
}
}
}