Hi, I found really confusing problem. Code (CSharp): [Serializable] public class AmmoComponent : IComponent { public override IEnumerator Compute() { //Code ... } void Start() { StartCoroutine(GenerateDataLoop()); } IEnumerator GenerateDataLoop() { while (true) { yield return new WaitForSeconds(0.5f); ComponentResult result = new ComponentResult(10); //PROBLEM------------------------------------------------------------------------ if (result == null) //Now the result is null. How its possible? Debug.LogError("WTF?"); // //PROBLEM------------------------------------------------------------------------ yield return new WaitForSeconds(0.1f); } } } Code (CSharp): public interface IComponentResult { object Value { get; } } Code (CSharp): public class ComponentResult : MonoBehaviour ,IComponentResult { private object data; public ComponentResult(object data) { this.data = data; } public object Value { get { return data; } } } Code (CSharp): delegate void ComputingHanler(); public abstract class IComponent : MonoBehaviour { public bool Computing = false; abstract public IEnumerator Compute(); public void StartCompute() { StartCoroutine(Compute()); } public delegate void DataRecive(IComponentResult data); public event DataRecive OnComputing; }
I found solution. Cant instantiate MonoBehavior with "new" i must use Instantiate, or addComponent etc... Solution: Remove MonoBehavior from ComponentResult, because i dont need MonoBehavior features in this class. Now its works!