标签:类对象 dcom coroutine errors 添加 命令 component star enc
public void loadPic(string url)
{
WWW www = new WWW(url);
StartCoroutine(WaitForRequest(www));
}
IEnumerator WaitForRequest(WWW www)
{
yield return www;
// check for errors
if (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的所有子游戏对象。
或者建一个该类的实例,不要用单例模式。
标签:类对象 dcom coroutine errors 添加 命令 component star enc
原文地址:https://www.cnblogs.com/mcyushao/p/9636467.html