HELP 2D Top Down Shooter Bullets Only go Horizontal
I have been looking at tutorials and looking on forms but I can't either find someone with the same problem or a solution to it. I am trying to make a 2D Top down shooter but when I fire the gun the bullet only moves horizontally. Also if you shoot straight up or straight down the bullet speeds are the fastest. When it is gun is diagonal it has little to no speed. Also the bullets are not appearing on the screen/game they are only appearing in the scene. They only appear in the game in Attempt 2 (labeled in the code.)
Here is my GunCode that can either be attached to a gun held by the player or on the player making them move:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GunCode : MonoBehaviour
{
public Transform gunPoint;
public GameObject bulletPreFab;
public float bulletSpeed = 20f;
public float bulletRangeSec = 2f;
// Update is called once per frame
void Update()
{
LookMouse();
if(Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
void LookMouse()
{
//Grabs the position of the mouse in a Vector3
Vector3 mousePos = Input.mousePosition;
//Makes it so the psoition is relative the the mouse in the world and not anywhere on the screen
mousePos = Camera.main.ScreenToWorldPoint(mousePos);
/*Finds the direction by taking the
* x/y positions of the mouse and subtracting them from the position of the object
*/
Vector2 direction = new Vector2(mousePos.x - transform.position.x, mousePos.y - transform.position.y);
//Changes the transform of the object
transform.right = direction;
}
//Called when we are shooting
void Shoot()
{
//Grabs the position of the mouse in a Vector3
Vector3 mousePos = Input.mousePosition;
Debug.Log("Shoot");
Debug.Log(gunPoint.up);
//Creates the bullet
GameObject bullet = Instantiate(bulletPreFab, gunPoint.position, gunPoint.rotation);
//Gets the rigidbody of the gameobject/bullet
Rigidbody2D rb = bullet.GetComponent<Rigidbody2D>();
//Adds force to the bullet making it move
//Attempt 1
rb.AddForce(gunPoint.up * bulletSpeed, ForceMode2D.Impulse);
//Attempt 2
//bullet.transform.position = Vector2.MoveTowards(bullet.transform.position, mousePos, bulletSpeed * Time.deltaTime);
//Attempt 3
//rb.velocity = gunPoint.up * bulletSpeed;
//Attempt 4
//rb.velocity = gunPoint.forward * bulletSpeed;
//Attempt 5
//rb.velocity = transform.forward * bulletSpeed;
Destroy(bullet, bulletRangeSec);
}
}
Your answer
Follow this Question
Related Questions
Enemy pathfinding script for a 2D top down shooter game 0 Answers
I am creating 2D top down shooter game but i am stuck at the movement. Help! 1 Answer
2D top down shooter can only aim to the top right (mouse aim) 0 Answers
How do I give my top down game bullet spread? 1 Answer
How to make movement speed decrease for 2D Top-down shooting game? 0 Answers