relatively new to game dev and have these scripts. works perfectly as intended but further into development decided that I no longer wanted the gun to rotate around the player and instead just to stay in one spot but rotate on the Z axis. Below I have my shooting script to control the weapon and bullet script to control the bullet.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shooting : MonoBehaviour
{
public Camera mainCam;
private Vector3 mousePos;
public GameObject bullet;
public Transform bulletTransform;
public bool canFire;
public bool isFiring;
private float timer;
public float timeBetweenFiring;
void Update()
{
mousePos = mainCam.ScreenToWorldPoint(Input.mousePosition);
Vector3 rotation = mousePos - transform.position;
float rotZ = Mathf.Atan2(rotation.y, rotation.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, rotZ);
if (!canFire)
{
timer += Time.deltaTime;
if (timer > timeBetweenFiring)
{
canFire = true;
timer = 0; // If the player can fire, set the cooldown timer to 0
}
}
// Check if the player is holding down the mouse button and can fire
if (Input.GetKey(KeyCode.Mouse0) && canFire)
{
isFiring = true; // Set firing state to true
canFire = false; // Set firing state to false
Instantiate(bullet, bulletTransform.position, Quaternion.identity);
}
else
{
isFiring = false; // Set firing state to false when not firing
}
}
}
public class BulletScript : MonoBehaviour
{
private Vector3 mousePos;
private Camera mainCam;
private Rigidbody2D rb;
public float force;
public int damage;
void Start()
{
mainCam = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
rb = GetComponent<Rigidbody2D>();
mousePos = mainCam.ScreenToWorldPoint(Input.mousePosition);
Vector3 direction = mousePos - transform.position;
Vector3 rotation = transform.position - mousePos; // Rotates bullet towards direction of cursor
rb.velocity = new Vector2(direction.x, direction.y).normalized * force;
// Everything below this rotates bullet towards cursor
float rot = Mathf.Atan2(rotation.y, rotation.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(0, 0, rot + 90);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.gameObject.tag == "Enemies")
{
collision.gameObject.GetComponent<EnemyHealth>().TakeDamage(damage); // We will need to update this with a death animation before destroying the object
Destroy(gameObject);
}
if (collision.gameObject.tag == "Room")
{
Destroy(gameObject);
}
}
}
At the moment the script rotates around the player however I do not know the correct way to go about stopping this and just rotating by itself.
Cdog906 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.