i'm trying to make an enemy attack the player when the player is within range but it says an object reference cannot be found but i'm not sure where the issue is
i'm in the middle of making an enemy chase and attack a player when it gets close enough. I have it set up so when the player is within range, the enemy launches a projectile attack based on the direction it is facing, in this code it is throwing the error: "NullReferenceException: Object reference not set to an instance of an object EnemyAIAttackController.Update () (at Assets/Scripts/EnemyAIAttackController.cs:27)" below is all the necessary scripts involved in this task.
using UnityEngine; using System.Collections;
public class EnemyAIAttackController : MonoBehaviour {
Animator enemyAnimator;
public GameObject enemyGraphic;
Rigidbody2D enemyRB;
private EnemyAIFlipper direction;
private Enemy parent;
bool attacking;
void Start(){
enemyAnimator = GetComponentInParent<Animator> ();
enemyRB = GetComponentInParent<Rigidbody2D> ();
direction = GetComponent<EnemyAIFlipper>();
parent = GetComponent<Enemy>();
}
void Update(){
if (Input.GetKeyDown (KeyCode.L))
{
enemyAnimator.SetBool ("Attacking", attacking);
print("input");
if (direction.Facing() == true) {
parent.AttackRight();
Invoke ("endAttackAnimation",1/2);
} else {
parent.AttackLeft();
Invoke ("endAttackAnimation",1/2);
}
}
}
void endAttackAnimation(){
attacking = false;
}
void OnTriggerEnter2D(Collider2D Other){
if (Other.tag == "Player") {
if (direction.Facing() == true) {
parent.AttackRight();
} else {
parent.AttackLeft();
}
}
}
void OnTriggerStay2D(Collider2D Other){
if (Other.tag == "Player") {
}
}
}
using UnityEngine; using System.Collections;
public class EnemyAIFlipper : MonoBehaviour {
//public float enemySpeed;
Animator enemyAnimator;
public GameObject enemyGraphic;
bool canFlip = true;
bool facingRight = false;
float flipTime = 5f;
float nextFlipChance = 0f;
//public float chargeTime;
//float startChargeTime;
//bool moving;
Rigidbody2D enemyRB;
void Start(){
enemyAnimator = GetComponentInParent<Animator> ();
enemyRB = GetComponentInParent<Rigidbody2D> ();
}
void Update(){
if (Time.time > nextFlipChance) {
if (Random.Range (0, 10) >= 5) {
flipFacing ();
}
nextFlipChance = Time.time + flipTime;
}
}
void OnTriggerEnter2D(Collider2D Other){
if (Other.tag == "Player") {
if (facingRight && Other.transform.position.x < transform.position.x) {
flipFacing ();
} else if (!facingRight && Other.transform.position.x > transform.position.x) {
flipFacing ();
}
//canFlip = false;
//moving = true;
}
}
public bool Facing(){
return facingRight;
}
/*void OnTriggerStay2D(Collider2D Other){
if (Other.tag == "Player") {
if (startChargeTime < Time.time) {
if (!facingRight) {
enemyRB.AddForce (new Vector2 (1, 0) * enemySpeed);
} else {
enemyRB.AddForce (new Vector2 (-1, 0) * enemySpeed);
}
enemyAnimator.SetBool ("Moving", moving);
}
}
}*/
/*void OnTriggerExit2D(Collider2D Other){
if (Other.tag == "Player") {
canFlip = true;
moving = false;
enemyRB.velocity = new Vector2 (0f, 0f);
enemyAnimator.SetBool ("Moving", moving);
}
}*/
void flipFacing(){
if (!canFlip) {
return;
}
float facingX = enemyGraphic.transform.localScale.x;
facingX *= -1f;
enemyGraphic.transform.localScale = new Vector3(facingX, enemyGraphic.transform.localScale.y, enemyGraphic.transform.localScale.z);
facingRight = !facingRight;
}
}
any help would be greatly appreciated!
The error is at parent.AttackLeft();
and means that parent = null. $$anonymous$$ake sure that parent = GetComponent<Enemy>();
actually works.