- Home /
Problem with messenger extended
I am not sure, if it is correct to ask about the error with it here, but...
I get this error:
NullReferenceException Enemy.OnAttackReceived (Int32 Damage, Single Attack_Range, Single Attack_Spread) (at Assets/!Enemy/Enemy.cs:31) Messenger`3[System.Int32,System.Single,System.Single].Broadcast (System.String eventType, Int32 arg1, Single arg2, Single arg3, MessengerMode mode) (at Assets/_Scripts/_MessengerExtended/Messenger.cs .cs:212) Messenger`3[System.Int32,System.Single,System.Single].Broadcast (System.String eventType, Int32 arg1, Single arg2, Single arg3) (at Assets/_Scripts/_MessengerExtended/Messenger.cs .cs:203) Weapon_Meele_Default_Script.Attack () (at Assets/!Weapon/Weapon_Meele_Default_Script.cs:46) Weapon_Meele_Default_Script.Update () (at Assets/!Weapon/Weapon_Meele_Default_Script.cs:29)
With these two scripts: 1) using UnityEngine; using System.Collections;
public class Weapon_Meele_Default_Script : MonoBehaviour
{
public int Damage;
public float Attack_Cooldown;
public float Attack_Range;
public float Attack_Spread;
public GameObject WhatToDrop;
private float Timer;
void Update ()
{
if (Input.GetMouseButton (0))
{Attack ();
print ("Attack function launched");}
while(Timer>0)
Timer -= Time.deltaTime;
if(Timer<0)
Timer=0;
}
public void Attack()
{
Messenger<int, float, float>.Broadcast("AttackPlayer", Damage, Attack_Range, Attack_Spread);
Timer = Attack_Cooldown;
print ("We attacked");
}
}
2)
using UnityEngine;
using System.Collections;
public class Enemy : MonoBehaviour
{
public int MaxHealth = 100;
public int CurHealth = 100;
public GameObject Player;
private Transform TEXTMESH;
void Start ()
{
Messenger<int, float, float>.AddListener("AttackPlayer", OnAttackReceived);
Player = GameObject.Find("Player");
TEXTMESH = transform.Find("Health_Text");
TEXTMESH.GetComponent<TextMesh>().text = (CurHealth.ToString() + "/" + MaxHealth.ToString());
}
public void OnAttackReceived (int Damage, float Attack_Range, float Attack_Spread)
{
float distance = Vector3.Distance (Player.transform.position, transform.position);
Vector3 dir = (transform.position - Player.transform.position).normalized;
float direction = Vector3.Dot(dir, Player.transform.forward);
Debug.Log (direction);
Debug.Log (distance);
if (distance < Attack_Range)
{ if(direction>Attack_Spread)
{
HealthAdjustment(Damage);
}
}
}
public void HealthAdjustment (int adj)
{
CurHealth += adj;
TEXTMESH.GetComponent<TextMesh>().text = (CurHealth.ToString() + "/" + MaxHealth.ToString());
print("Enemy got hurt");
if(CurHealth < 0)
CurHealth = 0;
if(CurHealth>MaxHealth)
CurHealth=MaxHealth;
if(MaxHealth<1)
MaxHealth=1;
}
}
Problem is, I can not decypher what this error means.
Your answer
![](https://koobas.hobune.stream/wayback/20220613085145im_/https://answers.unity.com/themes/thub/images/avi.jpg)