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 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.radius = blastRadius;
explosionTime = Time.time + delay;
enemiesInRange = new List();
rb = GetComponent();
playerInRange = true;
start = gameObject.transform;
isThrown = false;
explosion = GetComponent();
capsuleCollider = GetComponent();
//Physics.IgnoreCollision(GameObject.FindGameObjectWithTag("nodecal").GetComponent(), collider);
Physics.IgnoreCollision(GameObject.FindGameObjectWithTag("Player").GetComponent(), 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());
}
if (other.tag == "Player")
{
playerInRange = true;
}
}
public void OnTriggerExit(Collider other)
{
//Debug.Log(other.tag);
if (other.tag == "enemy")
{
enemiesInRange.Remove(other.gameObject.GetComponent());
}
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.takeDamage(damage);
}
Destroy(gameObject, 2f);
}
public void throwGrenade()
{
isThrown = true;
rb.AddForce(10, 10, 0);
}
}
↧