协程的NullReferenceException 错误
public void loadPic(string url){WWW www = new WWW(url);StartCoroutine(WaitForRequest(www));}IEnumerator WaitForRequest(WWW www){yield return www;// check for errorsif (www.error == null){Debug.Log("WWW Ok!: " + www.text);image.GetComponent<Image>().overrideSprite = Sprite.Create(www.texture, new Rect(0, 0, 438, 441), new Vector2(0.5f, 0.5f));}else{Debug.Log("WWW Error: " + www.error);}}
ApiClient apiclient = new ApiClient();string imageurl = apiclient.callSearchApiWithCSharp(realEstateType, preisText.text, zimmerText.text);Debug.Log(imageurl);apiclient.loadPic(imageurl);
协同程序由协程调度程序运行,并且绑定到用于启动协程的MonoBehaviour。StartCoroutine是MonoBehaviour的实例成员。
不得使用“new”创建所有组件。始终需要使用AddComponent创建组件。组件只能在GameObjects上“活动”。
错误初始化的组件(即使用“new”创建)将变为“假的空对象”。
“假空对象”是真正的C#托管类,但它们缺少引擎核心中的本机C ++等价物。它们仍然可以用作“普通”托管类,但是与Untiy无关的任何东西都可以工作。此外,“UnityEngine.Object”基类会重载==运算符,并且当它缺少本机部分时“伪造”该对象为空。当您使用new创建Component类或者销毁此类对象时,会发生这种情况。
因此,解决方案是您必须将“ApiClient”组件附加到GameObject。与组件不同,GameObjects可以使用“new”创建。所以你可以简单地替换
ApiClient apiclient = new ApiClient();
同
ApiClient apiclient = (new GameObject("SomeObjName")).AddComponent<ApiClient>();
这将创建一个名为“SomeObjName”的新GameObject,并将ApiClient组件添加到其中。
请记住,GameObject(及其组件)现在将出现在场景中,直到您将其销毁。
作为替代方案,您可以使用以下命令将ApiClient组件附加到调用脚本所附加到的同一个游戏对象:
ApiClient apiclient = gameObject.AddComponent<ApiClient>();
每个组件(因此MonoBehaviour)都具有gameObject可用于访问此组件所附加的GameObject 的属性。
编辑
关于“销毁”的快速说明。销毁组件时,只会销毁和删除该组件。如果你在GameObject引用上调用Destroy,它将破坏包含所有附加组件的游戏对象(因为它们不存在没有GameObject)以及GameObject的所有子游戏对象。
或者建一个该类的实例,不要用单例模式。
协程的NullReferenceException 错误的更多相关文章
- lua中的协程
lua中的协程和线程类似: 1. 协程拥有自己的独立的栈,局部变量,和指令: 2. 所有协程都可以共享全局变量: 3. 协程不能像线程那样并行执行,协程之间需要相互协调执行,同一个时刻只能运行一个协程 ...
- Openresty Lua协程调度机制
写在前面 OpenResty(后面简称:OR)是一个基于Nginx和Lua的高性能Web平台,它内部集成大量的Lua API以及第三方模块,可以利用它快速搭建支持高并发.极具动态性和扩展性的Web应用 ...
- 【错误总结1:unity StartCoroutine 报 NullReferenceException 错误】
今天在一个项目中,写了一个单例的全局类,该类的作用是使用协程加载场景.但在StartCoroutine 这一步报了NullReferenceException 的错.仔细分析和搜索之后,得到错误原因. ...
- Lua的协程和协程库详解
我们首先介绍一下什么是协程.然后详细介绍一下coroutine库,然后介绍一下协程的简单用法,最后介绍一下协程的复杂用法. 一.协程是什么? (1)线程 首先复习一下多线程.我们都知道线程——Thre ...
- python之协程与IO操作
协程 协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B ...
- Python-09-线程、进程、协程、异步IO
0. 什么是线程(thread)? 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆 ...
- python学习道路(day11note)(协程,同步与异步的性能区别,url爬网页,select,RabbitMq)
1.协程 #协程 又称微线程 是一种用户的轻量级线程 程序级别代码控制 就不用加机器 #不同函数 = 不同任务 A函数切到B函数没有进行cpu级别的切换,而是程序级别的切换就是协程 yelied #单 ...
- c语言实现的协程
这几天突然对协程感兴趣,于是自己实现了一个,代码放在github上:https://github.com/adinosaur/Coro 协程是一种用户空间的非抢占式线程,主要用来解决等待大量的IO操作 ...
- [转载]协程-cooperative multitasking
[转载]协程三讲 http://ravenw.com/blog/2011/08/24/coroutine-part-1-defination-and-classification-of-corouti ...
随机推荐
- MySql安装和基本管理&mysql语句
MySql安装和基本管理 本章内容: mysql的安装.启动 mysql破解密码 统一字符编码 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下 ...
- STL:unordered_set/unordered_multiset(c++11)
unordered_set:容器内的元素无序排列,基于值进行获取单个元素速度非常快.内部根据它们的 hash value 被组织成 buckets(slot). unordered_multiset: ...
- Android 心跳动画
直接上代码 MainActivity public class MainActivity extends AppCompatActivity { private ImageView ivHart; ...
- oracle 中从某天到某天一天一次执行某个函数
DECLAREv_days INTEGER;v_start VARCHAR2(10);v_end VARCHAR2(10);v_3 INTEGER;v_enddays date;begin v_sta ...
- 我的图片爬虫demo
本来是根据scrapy教程写了一个下载图片的简易爬虫,但是搞了一天,死活下载不了图片. 然后换了一个网站,用原生的库写了一个图片爬虫. import urllib.requestimport osde ...
- Stealth潜行风格游戏源码(Unity5x)
官方的Stealth画质看起来不错.Unity 官方说Stealth样例属于中等难度,通过学习Stealth,可以获得: Create a fully functioning level of a ...
- scrapy的调试和环境安装技巧
1,先在settings中把ROBOTSTXT_OBEY = False 在主目录下面新建main文件 __autor__ = 'zhouli' __date__ = '2018/11/3 22:39 ...
- xcode 更新svn/Git后发现模拟器显示No Scheme问题
这个是由于XXX..xcodeproj包中xcuserdata文件夹中user.xcuserdatad文件夹名字的问题...user.xcuserdatad文件夹的名字,不是当前用户的名字,就会显示n ...
- swift - 接入听云监测 - 问题
1. 正常下载 探针SDK:https://report.tingyun.com/mobile-web/#/onlyHeader/sdkDownload 2.按步骤接入 ,添加库啊,什么的URLSc ...
- day 05 字典,字典嵌套
字典: 1.列表如果存储大量数据,查询速度相对慢一些 2.列表存储的数据,一般没有什么关联性 针对以上原因,python提供了一个基础数据类型,dict 字典 数据类型的分类 : 容器型数据类型:li ...