c# - StartCoroutine 给出 NullReferenceException
问题描述
我有2节课。
public class GameManager : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
var a = new Routine();
a.StartRoutine();
}
}
public class Routine : MonoBehaviour
{
public void StartRoutine()
{
StartCoroutine(test());
}
IEnumerator test(){
Debug.Log("MSG");
yield return null;
}
}
我把 GameManager 放在相机上,运行游戏并得到 NullReferenceException
NullReferenceException
UnityEngine.MonoBehaviour.StartCoroutine (System.Collections.IEnumerator routine) (at <d815b7efac424eeb8e053965cccb1f98>:0)
Routine..ctor () (at Assets/Routine.cs:9)
GameManager.Start () (at Assets/GameManager.cs:10)
那么这段代码有什么问题呢?
解决方案
您正在尝试使用以下行创建一个新的 Monobehaviour 对象:var a = new Routine();
。相反,您可以:
创建一个游戏对象并将Routine.cs
脚本添加为组件。
然后回到你的GameManager.cs
public class GameManager : MonoBehaviour {
public GameObject go;
void Start() {
Routine routine = go.GetComponent<Routine>();
routine.StartRoutine();
}
}
然后回到 Unity 编辑器,将包含Routine.cs
脚本的游戏对象添加到GameManager.cs
空的 go 字段
推荐阅读
- ios - PencilKit 的 Xcode 项目的 .drawing 扩展文件?
- entity-framework - 尝试激活“Controllers.HomeController”时无法解析“IRepositoryPMS.IProductRepository”类型的服务
- python - 如何检测使用 webapp2 单击了哪个图像按钮(输入类型 = 图像)?
- django - 在 Django 中,方法中的请求参数有什么作用?
- c# - 如何确定密钥上的 Azure.Security.KeyVault.Keys.Cryptography.CryptographyClient.Decrypt 的加密算法
- python - 在python中将csv转换为json时的编码问题
- db2 - 用于 DB2 日期算术的 COBOL 变量的定义
- python - 不应该匹配时的负前瞻匹配
- conv-neural-network - 参数个数:倒置残差块对图像分类任务的劣势
- python - 在气流 1.10.12 中导入 ClickHouseHook