Hello !
First post on the forum, I just just started to play with Unity (I love it so far), but I’m a little bit lost sometimes.
My current problem is the following :
I have a Player
and who can shoot Bullet
. For that I have created a prefab for each object, and associated a script for each prefab (Player.cs
and Bullet.cs
, respectivitely).
I was doing it alright at first, but only in one direction (to the right). Now, I would like to shoot bullet in the direction based on the player position, so I had to refactor my code a little.
Ideally, I would like to call a Shoot
function from the Player
script, which will Instantiate a bulletPrefab
, and call a Fly
function from the Bullet
script, which will take the player’s position to decide the direction.
Here is Player.cs
:
public class PlayerController : MonoBehaviour
{
public bool isMovingForward = true;
public GameObject bulletPrefab;
private void Shoot()
{
GameObject bullet = Instantiate(bulletPrefab, ..., ...);
Bullet bulletController = bullet.GetComponent<Bullet>();
bulletController.Fly(isMovingForward);
}
}
And Bullet.cs
public class Bullet : MonoBehaviour
{
private Rigidbody bulletRb;
void Start() {bulletRb = GetComponent<Rigidbody>();}
void Fly(bool isForward) {bulletRb.AddForce(getForceVector(), ForceMode.Impulse);}
Vector3 getForceVector() {...}
}
That … doesn’t work. I get NullReferenceException: Object reference not set to an instance of an object Bullet.Fly (System.Boolean isForward) (at Assets/Scripts/Bullet.cs:31)
Would you be able to help me understand what’s going on ?
Also, if you think I’m not doing it the right way, I’d love to here some suggestion, I’m very new to all of this.
Thanks !