在Unity中加载纹理始终抛出NullReferenceException

时间:2014-01-27 18:11:34

标签: c# null unity3d textures nullreferenceexception

我在Unity 4.3.3f1中工作,我正在尝试在运行时加载纹理,但我不断获得NullReferenceExpection。我的.png位于资产/资源中,由this question指定。

我的实际代码是

  Texture tex = Resources.Load("lava_pic", typeof(Texture)) as Texture;
  Rect pos = new Rect(transform.position.x - 50, 
        transform.position.y - 50, 100, 100);

  GUI.DrawTexture(pos, tex);

我也尝试使用.png扩展程序

错误是

NullReferenceException: Object reference not set to an instance of an object
UnityEngine.GUI.DrawTexture (Rect position, UnityEngine.Texture image, ScaleMode  
  scaleMode, Boolean alphaBlend, Single imageAspect) (at     
C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/GUI.cs:208)
UnityEngine.GUI.DrawTexture (Rect position, UnityEngine.Texture image) (at 
 C:/BuildAgent/work/d3d49558e4d408f4/artifacts/EditorGenerated/GUI.cs:204)
LavaScript.FixedUpdate () (at Assets/Scripts/LavaScript.cs:35)'

如果我输入Debug.Log(tex);,它也会打印出null,这就是问题所在。

我真的不知道为什么会这样。它位于that's where it needs to be以后的Resources文件夹中,我相当确定它可以是.png文件。我做错了什么?

2 个答案:

答案 0 :(得分:3)

尝试删除文件扩展名,使其仅为lava_pic

来自Resources docs的相关信息:

  

...必须省略扩展名

更新

我的机器上的工作示例。如果原始代码位于OnGUI之外,则可能是null对象是GUI而不是纹理。

我的纹理位于Assets/Resources/galaxy_example.png

public class DrawTexture : MonoBehaviour {
Texture tex;
Rect pos;
void Start () {
    tex = Resources.Load("galaxy_example", typeof(Texture)) as Texture;
    pos = new Rect(transform.position.x - 50, 
                   transform.position.y - 50, 100, 100);
}
void OnGUI(){
    Debug.Log (tex);
    GUI.DrawTexture(pos, tex);
}
}

答案 1 :(得分:1)

如果您尝试在Asset / Resource文件夹中加载图像,请使用:Resoure.Load("image",typeof(texture))作为纹理。

如果要从其他文件夹加载完整路径加载图像: Texture2D Txt= Resources.LoadAssetAtPath<Texture2D> ("Assets/Sprites/Scene1.png");