- Home /
Problem firing projectile at mouse location
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!
Answer by capnjake · Jun 29, 2015 at 04:00 PM
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?
}
}
}
ScreenToWorldPoint is exactly what I needed. I'm not entirely sure why my method was behaving the way it was, but this seems far more reliable. Thank you
@$$anonymous$$indlessZ it's because you define a world point with the 2D screen coordinates of mouse click. it's not related with the point you wanted.
Your answer
Follow this Question
Related Questions
Projectiles in 2.5D game 0 Answers
Why does my render texture cursor appear offset from my mouse cursor? 1 Answer
Problem Using ScreentoWorldPoint to Fire a Projectile 1 Answer
Cannot get mouse position in 2D using perspective 1 Answer
Getting 2D projectiles that fire in the direction of the mouse position to work in unity 5? 0 Answers