Question by
napster153 · Feb 07, 2021 at 09:40 AM ·
crashesplayer damage
Build crashes when I attack enemy
I keep getting a null reference exception whenever an enemy is destroyed. I've done some tinkering but still haven't found the problem. Here's the script.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerA : MonoBehaviour
{
//PlayerMove
private Transform myTransform;
private Vector3 destinationPosition;
private float destinationDistance;
public float moveSpeed;
//PlayerHealth
public float maxHealth;
public float health;
//PlayerAttack
private GameObject attackingenemy;
public float attackTimer;
private float currentAttackTimer;
private bool attacked;
private float dist;
public float range;
//PlayerAction
private float damage;
public float minDamage;
public float maxDamage;
//NPC Interaction
private bool triggeringenemy;
private bool followingenemy;
// Start is called before the first frame update
void Start()
{
myTransform = transform;
destinationPosition = myTransform.transform.position;
currentAttackTimer = attackTimer;
health = maxHealth;
attackingenemy = GameObject.FindGameObjectWithTag("Enemy");
}
// Update is called once per frame
void Update()
{
RaycastHit hit;
destinationDistance = Vector3.Distance(destinationPosition, myTransform.position);
if (destinationDistance < 0.5f)
{
moveSpeed = 0;
}
else if (destinationDistance > 0.5f)
{
moveSpeed = 10;
}
if (Input.GetMouseButtonDown(0) && GUIUtility.hotControl == 0)
{
Plane playerPlane = new Plane(Vector3.up, myTransform.position);
Ray ray = UnityEngine.Camera.main.ScreenPointToRay(Input.mousePosition);
float hitdist = 0.0f;
if (playerPlane.Raycast(ray, out hitdist))
{
Vector3 targetPoint = ray.GetPoint(hitdist);
destinationPosition = ray.GetPoint(hitdist);
Quaternion targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
myTransform.rotation = targetRotation;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider.tag == "Enemy")
{
attackingenemy = hit.collider.gameObject;
followingenemy = true;
}
else
{
attackingenemy = null;
followingenemy = false;
}
}
}
}
if (triggeringenemy)
{
Attack();
}
if (currentAttackTimer <= 0)
{
currentAttackTimer = attackTimer;
currentAttackTimer -= 1 * Time.deltaTime;
attacked = false;
}
if (destinationDistance > 0.5f)
{
myTransform.position = Vector3.MoveTowards(myTransform.position, destinationPosition, moveSpeed * Time.deltaTime);
}
if (health <= 0)
{
Die();
}
if (health <= 0)
{
SceneManager.LoadScene("MM");
}
}
public void Move()
{
if (followingenemy)
{
if (!triggeringenemy)
{
transform.position = Vector3.MoveTowards(transform.position, attackingenemy.transform.position, moveSpeed);
this.transform.LookAt(attackingenemy.transform);
}
else
{
Attack();
}
}
}
public void Attack()
{
if (!attacked)
{
damage = Random.Range(minDamage, maxDamage);
attacked = true;
}
if(attackingenemy)
{
myTransform.LookAt(attackingenemy.transform);
attackingenemy.GetComponent<Enemy1>().health -= damage;
Debug.Log("Enemy is attacked");
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Enemy")
{
triggeringenemy = true;
}
if (other.tag == "Enemy")
{
attackingenemy = other.gameObject;
}
}
void OnTriggerExit (Collider other)
{
if (other.tag == "Enemy")
{
triggeringenemy = false;
}
}
public void Die()
{
if (health <= 0)
{
Destroy(this.gameObject);
print("Player has been destroyed");
}
}
}
Comment
Your answer
Follow this Question
Related Questions
Unity always crashes on opening 2 Answers
Live version of game crashes / is buggy 0 Answers
[URGENT!] Unity crashing when I level up my character in game? 1 Answer
Changing Graphic Levels Causing Crash 1 Answer
Seldom random crashes android (google cardboard) builds, when loading a new scene. 1 Answer