【问题标题】:Getting a null while trying to load a prefab from resources folder尝试从资源文件夹加载预制件时获取空值
【发布时间】:2014-11-10 01:38:42
【问题描述】:

我在 Resources 文件夹中加载了一个预制件,但是当我尝试从代码中获取它时,它返回给我 NULL。我怎样才能做对?我只想获取预制件并访问位于 prefab 中的 UI 组件,然后从预制件对象中更改 UI 值..

GameObject alertPrefab = (GameObject)Instantiate(Resources.Load("Prefabs/AlertPrefab"));

【问题讨论】:

  • 能否先添加一个公共变量public GameObject alertPrefab;,然后手动将预制件拖到UI中的字段上?检查它是否工作没有任何错误。还要确保你的AlertPrefab 有一个扩展名.prefab
  • 认为你应该像 Meehow 的 commnet 一样解决和隔离如果你的 NullPointer 不是你的预制件的问题,因为你的实例化似乎是正确的。或尝试 ("Assets/Prefabs/AlertPrefab") 或只是 ("/Prefabs/AlertPrefab") 但我不确定它是否确实有什么不同 =p

标签: c# user-interface unity3d


【解决方案1】:

您还可以创建GameObject 类型的public[SerializeField] 变量,并将您要使用的Prefab 拖动到script 内的Inspector

创建公共变量

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

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

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);
}

【讨论】:

    【解决方案2】:

    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 是正确的——这个答案是完全错误的。路径 is 使用正斜杠。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 2011-01-31
    • 2013-03-22
    • 2014-12-27
    • 2023-04-03
    • 2015-06-27
    相关资源
    最近更新 更多