Using Invoke method from another class return NullReferenceException

Hi,

I’m trying to use method in other class that uses Invoke method but I always get a NullReferenceException. If I use methodBOne directly, Invoke’s method works well.

Can anyone explain me why this happens and any solution?

Example code:

public class A{
  public void methodA(){
     B classBInstance = new B();
     classBInstance.methodBOne();
  }
}

public class B
{
    public void methodBOne()
    {
        Invoke("methodBTw0", time);
    }
    public void methodBTw0()
    {
        //Do something
    }
}

Thanks!

What you didn’t show in your code snippet is that class B is a MonoBehaviour (since it’s able to call the Invoke method), and you should never call the constructor of a MonoBehaviour in Unity. The either have to drag the script to a prefab in a scene, or you instantiate it at runtime with the Instatiate() method.

For your code to work, you should have a reference to your class B in your class A, and then call classBInstance.methodBOne(). Remove the B classBInstance = new B(); line (Unity will warn you at runtime otherwise) since it can lead to unexpected behavior.

using UnityEngine;
using System.Collections;

public class A : MonoBehaviour {
	public B classBInstance;

	void Start(){
		classBInstance = GetComponent<B>();
		methodA();
	}

		public void methodA(){
			classBInstance.methodBOne();
		}
	}

using UnityEngine;
using System.Collections;

public class B : MonoBehaviour
{
	public void methodBOne()
	{
		Invoke("methodBTw0", 1f);
	}
	public void methodBTw0()
	{
		Debug.Log("Executed");
	}
}