当我将prefab实例化为GameObject时,没有问题。但是在将prefab实例化为RawImage时,会出现NullReferenceException问题。(如果你需要知道,预制是RawImage )
这是我的代码:
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);
}
}
}发布于 2015-07-27 03:40:55
这是因为您正在将GameObject预置转换为组件类型(RawImage),这是可能的,因为组件类型继承自Object类型。
因此,当您尝试获取组件时,例如,在下面的代码行上:
rt[i] = myObject[i].GetComponent<RectTransform>();抛出NullReferenceExceptiion是因为"img“gameObject被强制转换为组件类型的对象,因此RectTransform组件不存在。
尝试将您的公共GameObject img字段更改为:
public RawImage img;发布于 2015-07-27 03:53:32
您的问题是您正在尝试将GameObject转换为Component。instantiate命令将为您创建一个GameObject,在本例中是带有附加组件的预制件。
要解决此问题,您只需存储GameObject而不是组件,如果需要RawImage组件,请以与RectTransform相同的方式获取它。
public GameObject[] myObject = new GameObject[8];而不是
public RawImage[] myObject = new RawImage[8];(不要忘记将您的转换调用从as RawImage更改为as GameObject)
如果您引用的是实际的Image,而不是组件。您可能希望查看Resources.Load,而不是使用Instantiate。
https://stackoverflow.com/questions/31639884
复制相似问题