首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unity3D RawImage(UI)实例化

Unity3D RawImage(UI)实例化
EN

Stack Overflow用户
提问于 2015-07-27 01:28:26
回答 2查看 1.7K关注 0票数 1

当我将prefab实例化为GameObject时,没有问题。但是在将prefab实例化为RawImage时,会出现NullReferenceException问题。(如果你需要知道,预制是RawImage )

这是我的代码:

代码语言:javascript
复制
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class Insstantia : MonoBehaviour
{
    public GameObject img;

    public void Instan()
    {
        RawImage[] myObject = new RawImage[8];
        RectTransform[] rt = new RectTransform[8];

        for (int i = 0; i < 8; i++)
        {
            myObject[i] = Instantiate(img, new Vector3(800 * i, 0, 0), Quaternion.identity) as RawImage;
            rt[i] = myObject[i].GetComponent<RectTransform>();
            myObject[i].transform.SetParent(gameObject.transform, false);

            rt[i].anchorMin = new Vector2(0.05875f, 0);
            rt[i].anchorMax = new Vector2(0.94375f, 1);
        }
    }
 }
EN

回答 2

Stack Overflow用户

发布于 2015-07-27 03:40:55

这是因为您正在将GameObject预置转换为组件类型(RawImage),这是可能的,因为组件类型继承自Object类型。

因此,当您尝试获取组件时,例如,在下面的代码行上:

代码语言:javascript
复制
rt[i] = myObject[i].GetComponent<RectTransform>();

抛出NullReferenceExceptiion是因为"img“gameObject被强制转换为组件类型的对象,因此RectTransform组件不存在。

尝试将您的公共GameObject img字段更改为:

代码语言:javascript
复制
public RawImage img;
票数 1
EN

Stack Overflow用户

发布于 2015-07-27 03:53:32

您的问题是您正在尝试将GameObject转换为Component。instantiate命令将为您创建一个GameObject,在本例中是带有附加组件的预制件。

要解决此问题,您只需存储GameObject而不是组件,如果需要RawImage组件,请以与RectTransform相同的方式获取它。

代码语言:javascript
复制
public GameObject[] myObject = new GameObject[8];

而不是

代码语言:javascript
复制
public RawImage[] myObject = new RawImage[8];

(不要忘记将您的转换调用从as RawImage更改为as GameObject)

如果您引用的是实际的Image,而不是组件。您可能希望查看Resources.Load,而不是使用Instantiate。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31639884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档