UnassignedReferenceException on rigidbody
I have a grenade prefab, and I'm instantiating it whenever the player hits G. This is the script attached to it. However, whenever one is instantiated, I'm getting an UnassignedReferenceException for rb, even though I have one attached to my prefab game object. Also, OnTriggerExit is getting called because the player is exiting my trigger sphereCollider even though they are still well within the sphere. I don't have this script attached to any other game objects.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class grenade : MonoBehaviour
{
public float blastRadius;
public int damage;
public float delay;
private ParticleSystem explosion;
private float explosionTime;
private SphereCollider sphereCollider;
private List<EnemyHealth> enemiesInRange;
private bool playerInRange;
private Rigidbody rb;
private bool isThrown;
private Transform start;
private CapsuleCollider capsuleCollider;
// Use this for initialization
void Awake()
{
sphereCollider = GetComponent<SphereCollider>();
sphereCollider.radius = blastRadius;
explosionTime = Time.time + delay;
enemiesInRange = new List<EnemyHealth>();
rb = GetComponent<Rigidbody>();
playerInRange = true;
start = gameObject.transform;
isThrown = false;
explosion = GetComponent<ParticleSystem>();
capsuleCollider = GetComponent<CapsuleCollider>();
//Physics.IgnoreCollision(GameObject.FindGameObjectWithTag("nodecal").GetComponent<Collider>(), collider);
Physics.IgnoreCollision(GameObject.FindGameObjectWithTag("Player").GetComponent<Collider>(), capsuleCollider);
}
// Update is called once per frame
void Update()
{
//Debug.Log(playerInRange);
if (!isThrown)
{
gameObject.transform.position = start.position;
}
if (Time.time >= explosionTime)
{
explode();
}
}
public bool getIsThrown()
{
return isThrown;
}
public void OnTriggerEnter(Collider other)
{
if (other.tag == "enemy")
{
enemiesInRange.Add(other.gameObject.GetComponent<EnemyHealth>());
}
if (other.tag == "Player")
{
playerInRange = true;
}
}
public void OnTriggerExit(Collider other)
{
//Debug.Log(other.tag);
if (other.tag == "enemy")
{
enemiesInRange.Remove(other.gameObject.GetComponent<EnemyHealth>());
}
if (other.tag == "Player")
{
playerInRange = false;
}
}
public void OnCollisionEnter(Collision collision)
{
Debug.Log(collision.gameObject.tag);
}
public void explode()
{
explosion.Play();
if (enemiesInRange.Count > 0)
{
foreach (EnemyHealth enemyHealth in enemiesInRange)
{
enemyHealth.takeDamage(damage, enemyHealth.gameObject.transform.position);
if (enemyHealth.getIsDead())
{
enemyHealth.dismemberLeftLeg();
enemyHealth.dismemberRightLeg();
}
}
}
if (playerInRange)
{
PlayerHealth playerHealth = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerHealth>();
playerHealth.takeDamage(damage);
}
Destroy(gameObject, 2f);
}
public void throwGrenade()
{
isThrown = true;
rb.AddForce(10, 10, 0);
}
}
Your answer
Follow this Question
Related Questions
Strange physics on RigidBody when Collider enabled (locked axis) 2 Answers
Is there any reason to have a rigidbody on a gameobject that doesn't have a collider? 1 Answer
Object and first-person controller's collision not being registered 1 Answer
Player stuck when jumping into a wall 0 Answers
Hitting / Mining / slashing ? 0 Answers