В Unity Engine поле-член, на которое ссылается сопрограмма, становится NULL.C#

Место общения программистов C#
Anonymous
В Unity Engine поле-член, на которое ссылается сопрограмма, становится NULL.

Сообщение Anonymous »

Этот код работает нормально.

Код: Выделить всё

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

class Enemy
{
public string enemyName = "Default Enemy Name";
TestGameObject_002 monoBehaviour = null;
public Enemy(TestGameObject_002 monoBehaviour)
{

}
}

public class TestGameObject_002 : MonoBehaviour
{
Enemy enemy = null;

void Start()
{
enemy = new Enemy(this);
StartCoroutine(TestCoroutine());
}

public IEnumerator TestCoroutine()
{
if(enemy != null)   Debug.Log("TestGameObject_002.TestCoroutine(), enemy is not null");
else                Debug.Log("TestGameObject_002.TestCoroutine(), enemy is null");

Debug.Log("TestGameObject_002.enemy.enemyName = " + enemy.enemyName);

yield return null;
}
}
Но по какой-то причине код ниже делает врага нулевым. Поле-член, на которое ссылается сопрограмма, становится NULL. Трудно понять почему, поскольку я не думаю, что передача MonoBehavior по ссылке и вызов StartCoroutine вызовет какие-либо проблемы.
Как и ожидалось, приведенный ниже код должен работать нормально.

Код: Выделить всё

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;

class Enemy
{
public string enemyName = "Default Enemy Name";
TestGameObject_002 monoBehaviour = null;
public Enemy(TestGameObject_002 monoBehaviour)
{
this.monoBehaviour = monoBehaviour;

monoBehaviour.StartCoroutine(monoBehaviour.TestCoroutine());
}
}

public class TestGameObject_002 : MonoBehaviour
{
Enemy enemy = null;

void Start()
{
enemy = new Enemy(this);
}

public IEnumerator TestCoroutine()
{
//yield return null;
if(enemy != null)   Debug.Log("TestGameObject_002.TestCoroutine(), enemy is not null");
else                Debug.Log("TestGameObject_002.TestCoroutine(), enemy is null");

Debug.Log("TestGameObject_002.enemy.enemyName = " + enemy.enemyName);

yield return null;
}
}
если вы вернете управление циклу единства с помощью выхода перед ссылкой на врага, все будет работать нормально.

Подробнее здесь: https://stackoverflow.com/questions/790 ... comes-null

Вернуться в «C#»