0

嗨,我的场景名称是一个游戏。在那个场景中,我有一个名为 ITMCONTAINER 的主面板。在项目容器中,我有一个名为 ITEM 的面板。我在 ITEM PANEL 中附加了一个脚本。在那个脚本中,我有一个公开的游戏对象、一个原始图像、文本以及循环将继续多少次是公开的。代替游戏对象,我附加了我的预制件,其中包含 1 个文本和 2 个原始图像。代替文本,我附加了预制件的文本组件,与原始图像相同。当我运行游戏时,我得到正确的文本值,但 rawimage 在运行时显示为空白。在这里我运行了 3 次循环,并且所有 3 次它都在 itempanel 中创建了我的预制面板的克隆作为子 我希望 rawimage 在我的动态运行

输出

在此处输入图像描述

预制件

在此处输入图像描述

  1. image= 在这个图像中,它包含输出。这里 rawimage 是空白的,但文本值完美

  2. image = 这是我的预制件,预制件将在运行时被克隆,这里它显示图像但在运行时,在克隆中它显示为空白

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;   
    using UnityEngine.UI;    
    public class DynamicData : MonoBehaviour {      
    public GameObject prefab; 
    public Text name;       
    public int numberToCreate;
    
    public RawImage profile;
    
    
    void Start () {
    
        for (int i = 0; i < numberToCreate; i++)
        {
            name.text = "a"+i;
            StartCoroutine( ImageDownload( profile));
    
            Instantiate <GameObject>(prefab, transform);
        }
    
    }
    IEnumerator ImageDownload ( RawImage img) {
    
        WWW www = new WWW("https://www.w3schools.com/w3images/fjords.jpg");
    
        yield return www;
    
        Texture2D texure = new Texture2D (1, 1);
        texure.LoadImage (www.bytes);
        texure.Apply ();
        img.texture = texure;
    
    }
    

    }

4

1 回答 1

0

您正在将下载的图像分配给配置文件变量,该变量不是来自实例化对象的变量。在循环中,您需要获取每个实例化对象的子对象,transform.Find("profile")然后获取RawImage附加到它的组件GetComponent并将其传递给ImageDownload函数。

用这个替换你的for循环:

for (int i = 0; i < numberToCreate; i++)
{
    name.text = "a" + i;

    GameObject instance = Instantiate<GameObject>(prefab, transform);
    //Get RawImage of the current instance
    RawImage rImage = instance.transform.Find("profile").GetComponent<RawImage>();
    StartCoroutine(ImageDownload(rImage));
}

请重命名public Text name;为其他public Text userName;名称,因为该名称已经在MonoBehavior您的脚本中声明。

于 2017-10-01T10:02:36.263 回答