В 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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