Arya Akhavein
Arya Akhavein

Reputation: 355

How can I add a rotation to my bullets when they are shot?

I haven't used rotation in a while so I can't remember how to do this. I am trying to make a random trajectory for my bullets and I want to add a random rotation but I don't know how to add the rotation. I commented in the script where the rotation should be added. I have tried adding + transform.rotation * Quaternion.Euler(0,rot, 0) but I got the error error CS0019: Operator '+' cannot be applied to operands of type 'Vector3' and 'Quaternion'. What could I add to make this work?

      using System.Collections;
      using System.Collections.Generic;
      using UnityEngine.UI;
      using UnityEngine;
      
      public class Player : MonoBehaviour
      {
          public GameObject bulletPrefab;
      
          public Camera playerCamera;    
      
          private Coroutine hasCourutineRunYet = null;
      
          public int ammo = 300;
          public Text Ammmo;
      
          private float xPos;
          private float zPos;
          private float yPos;
      
          private float rot;
      
          // Update is called once per frame
          void Update()
          {        
              Ammmo.text = "Ammo: " + ammo.ToString();        
              
              if(Input.GetMouseButtonDown(0))
              {
                  if (hasCourutineRunYet == null)
                      hasCourutineRunYet = StartCoroutine(BulletShot());
              }
          }
      
          IEnumerator BulletShot()
          {
              xPos = Random.Range(-0.3f, 0.3f);
              yPos = Random.Range(-0.3f, 0.3f);
              zPos = Random.Range(-0.3f, 0.3f);
              rot = Random.Range(-10.0f, 10.0f);
      
              GameObject bulletObject = Instantiate(bulletPrefab);
              bulletObject.transform.position = playerCamera.transform.position + playerCamera.transform.forward + new Vector3(xPos, yPos, zPos) ; // add rotation here
              bulletObject.transform.forward = playerCamera.transform.forward;
      
              yield return new WaitForSeconds(1.0f);
              hasCourutineRunYet = null;
              ammo--;
          }
      }

Upvotes: 1

Views: 83

Answers (1)

Steven Burgess
Steven Burgess

Reputation: 11

I would look into the transform.rotation.RotateAround function. With this, you can call your bullet's relative forward, and rotate around itself essentially

Code Below:

using UnityEngine;

//Attach this script to a GameObject to rotate around the target position.
public class Example : MonoBehaviour
{
    //Assign a GameObject in the Inspector to rotate around
    public GameObject target;

    void Update()
    {
        // Spin the object around the target at 20 degrees/second.
        transform.RotateAround(target.transform.position, Vector3.up, 20 * Time.deltaTime);
    }
}

Here's a URL to the documentation: https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html

Upvotes: 1

Related Questions