【问题标题】:Unity Not Displaying Sprites / TexturesUnity 不显示精灵/纹理
【发布时间】:2014-12-20 14:40:16
【问题描述】:

我刚开始使用 Unity,但在最基本的操作方面遇到了问题 - 让图像出现在屏幕上。

我已经尝试对此进行研究,但几乎所有关于 Unity 的教程/信息都是关于更高级的用法,并未涵盖基础知识。关于基本图像加载和绘制的信息很少。

我的项目有一个对象,附有这个脚本:

public class Boxland_Main : MonoBehaviour
{
     Texture2D test_sprite;

     void Start ()
     {
       print ("STUFF");  // this works
       test_sprite = (Texture2D) Resources.Load ("richard_green.png");
     }

     void Update ()
     {
       GUI.DrawTexture (new Rect(0, 0, 50, 50), test_sprite);  // this doesn't work
     }
}

我的图像文件位于 Resources 目录中,但我得到的只是粉蓝色屏幕。

编辑:

为了清楚起见,我会对任何仅在屏幕上显示图像的解决方案感兴趣。我觉得我离回归 XNA 或 GameMaker 越来越近了。

更新:

这是我现在得到的(仍然没有绘制精灵):

public class Boxland_Main : MonoBehaviour
  {
  public Texture2D test_sprite;

  void Start ()
    {
    test_sprite = (Texture2D) Resources.Load ("richard_green");
    }

  void OnGui ()
    {
    if (test_sprite) GUI.DrawTexture (new Rect (0, 0, 50, 50), test_sprite);
    }
  }

更新:

我发现如果我直接从资产窗口将图像拖到 Unity UI 的场景窗口中,它会将精灵添加到视图中,并且精灵会在编译时显示。但是,它呈现模糊和像素化,并且似乎没有任何方法可以在 sprite 表上指定特定帧。

更新:

我在研究时发现了一些可能指向部分答案的材料:

Unity 4.3 - 2D, how to assign programmatically sprites to an object http://docs.unity3d.com/ScriptReference/Resources.Load.html

这似乎涵盖了加载图像,但从未解释如何绘制图像。

【问题讨论】:

  • “不起作用”不是一个好的描述 - 它是否存在错误,如果是,是哪一个?请注意,Resources 类只能加载位于 Resources 文件夹中的资源。
  • @LearnCocos2D:正如我在最后一行中所说,该文件位于资源文件夹中。没有错误,只是一个空白的蓝色背景。
  • 从资源文件夹加载图像重要吗?如果这是您在统一中尝试做的最基本的事情,那么您的想法仍然不够基本
  • @ryanscottmurphy:我在研究时能够挖掘出的几个示例和提示似乎表明图像文件需要位于该文件夹中,否则它们将无法加载。

标签: c# unity3d sprite texture2d


【解决方案1】:

您应该在 OnGUI 中调用 GUI 函数,而不是更新 (http://docs.unity3d.com/Manual/gui-Basics.html)

所以尝试将您的 Update() 更改为

void OnGUI() {
    if(test_sprite) {
        GUI.DrawTexture (new Rect(0, 0, 50, 50), test_sprite);
    }
}

【讨论】:

  • 谢谢!我会试试这个,让你知道会发生什么。
  • 我添加了这些更改,但对输出没有影响。
  • 好的,下一步,尝试将 test_sprite 公开并手动将图像拖放到该字段。也许这会有所帮助。
  • 我公开了 Texture2D,但我不知道去哪里进行拖放。这是 Unity 的 UI 编辑器中的某个地方吗?
  • 是的,选择带有脚本的游戏对象。在检查器窗口中,您应该看到 Boxland_Main 和 Test_sprite (Texture2D) 字段。
【解决方案2】:

您没有为资源指定 .png。只是名字。

test_sprite = (Texture2D) Resources.Load("richard_green", Texture2D);

【讨论】:

  • 感谢您的帮助。我从字符串中删除了文件扩展名,但它对输出没有影响。在文件名之后包含 Texture2D 会产生“type used like a variable”错误。
【解决方案3】:

我从来没有让 Unity 使用任何技术绘制任何东西(看起来不是模糊和压缩的),但我只是尝试了 Monogame (http://www.monogame.net/),并在五分钟内在屏幕上获得了漂亮的精灵. Monogame 的缺点是缺乏对 Xbox One 的支持,但我现在愿意接受。

看来我的最终结论是:

A) Unity 仍然不是制作 2D 游戏的好解决方案,或者

B) 它与我用过的其他引擎是如此不同,以至于我无法用大脑来环绕它。

然而,很明显,很多开发者都在其中制作了出色的游戏(带有图形)。确实需要有人以“第 1 步:启动项目,第 2 步:加载图像,第 3 步:绘制图像”的风格编写一个好的基本介绍教程。

当我准备第三次尝试 Unity 时,我可能会在未来某个时候回到这篇文章,看看是否有任何新的想法/技术。

【讨论】:

    【解决方案4】:

    您是否尝试过有关统一的示例? https://docs.unity3d.com/530/Documentation/ScriptReference/Texture2D.LoadImage.html

    using UnityEngine;
    
    public class ExampleClass : MonoBehaviour {
        // Load a .jpg or .png file by adding .bytes extensions to the file
        // and dragging it on the imageAsset variable.
        public TextAsset imageAsset;
        public void Start() {
            // Create a texture. Texture size does not matter, since
            // LoadImage will replace with with incoming image size.
            Texture2D tex = new Texture2D(2, 2);
            tex.LoadImage(imageAsset.bytes);
            GetComponent<Renderer>().material.mainTexture = tex;
        } }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多