从资源文件夹加载预制体时遇到空值错误

3
我在资源文件夹中加载了一个预制体,但是当我试图从代码中获取它时,它返回了NULL。我该怎么做才能正确地获取它?我只想获取预制体并访问位于预制体中的UI组件,然后从预制体对象更改UI值。
GameObject alertPrefab = (GameObject)Instantiate(Resources.Load("Prefabs/AlertPrefab"));

1
你能先添加一个公共变量 public GameObject alertPrefab;,然后手动将预制体拖到UI字段中吗?检查是否没有任何错误。同时确保你的 AlertPrefab 有一个 .prefab 的扩展名。 - user2140173
你可以像Meehow的评论所说那样进行解决和隔离,如果你的NullPointer问题不是由于prefab引起的,因为你的实例化看起来没问题。或者尝试使用("Assets/Prefabs/AlertPrefab")或者只用("/Prefabs/AlertPrefab"),但我不确定这是否真的有任何区别 =p - Frohlich
2个回答

0

您还可以创建类型为GameObjectpublic[SerializeField]变量,并将您想要使用的Prefab拖放到Inspector中的script中。

创建公共变量

enter image description here

将预制件从预制件文件夹拖到脚本中。

enter image description here

然后从脚本内的公共变量实例化它

private void spawnNewFood () {
    float rand = Random.Range (2, 6);
    int factor = ((int)rand % 2 == 0) ? 1 : -1;
    float x = rand * factor;
    float z = rand * factor;

    Vector3 positionFood = new Vector3 (x, 0, z);
    Instantiate (_food, positionFood, Quaternion.identity);
}

-3

在Unity中,所有资源名称和路径都使用正斜杠,使用反斜杠的路径将无法工作。

"Prefabs/AlertPrefab",你不能这样做。

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Start() {
        GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
        go.renderer.material.mainTexture = Resources.Load("glass", typeof(Texture2D));
    }
}

иҝҷжҳҜжӯЈж–ңжқ пјҡ/пјҢиҝҷжҳҜеҸҚж–ңжқ пјҡ\гҖӮдёәд»Җд№Ҳ"Prefabs/AlertPrefab"дјҡжҳҜй”ҷиҜҜзҡ„пјҹжҲ‘зЎ®и®ӨгҖӮ - GabLeRoux
1
遗憾的是,GabLeRoux是正确的 - 这个答案完全错误。路径确实使用正斜杠。 - Tim Keating

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接