Unity 4.3 - 2D,如何以编程方式将sprite分配给对象

Ada*_*cio 11 c# unity-game-engine

我正在尝试创建一个负责创建和显示不同精灵的对象,所以我想以编程方式直接访问资产/精灵,而不是在该对象下的层次结构中拖放精灵.

有一种方法可以编程方式创建一个新的sprite并分配我在assets文件夹中的内容吗?

我还希望有一种数据结构,在游戏开始时加载一些图像,数组或字典或类似的东西,所以我可以根据我需要显示的图像情况进行更改.但是,因为我是Unity新手,所以让我感到困惑的是如何使用assets文件夹以编程方式创建一个sprite引用精灵.

编辑进度:

我创建了一个像这样的sprite:

public Sprite[] mySprites;
Run Code Online (Sandbox Code Playgroud)

在Unity中我手动在数组中添加了精灵(我只是在变量数组中拖动了png)所以实际上在这个对象中我有一个组件,这个数组充满了精灵

在组件内部我也做到了这一点:

public SpriteRenderer renderer;
renderer = transform.GetComponent<SpriteRenderer>();
renderer.sprite = (Sprite)mySprites [0];
Run Code Online (Sandbox Code Playgroud)

我没有错误,直到我运行游戏,然后没有分配精灵,我得到了这个:

"取消引用时,PPtr强制转换失败!从Texture2D到Sprite的Castin!"

即使没有强制转换(Sprite)我也得到了这个错误.顺便说一下我不知道为什么他告诉我关于Texture2D的事情,因为它被设置为精灵

pek*_*pek 12

以编程方式创建精灵可能有点难度.您可能需要在内存中创建纹理,填充数据,然后在磁盘上写入该纹理.之后,您应该能够使用C#的文件或Unity的WWW.LoadFromCacheOrDownload来读取它.

以下是动态创建纹理的方法:http://answers.unity3d.com/questions/9919/how-do-i-create-a-texture-dynamically-in-unity.html


要以编程方式加载精灵(不是动态创建的精灵),它们需要位于名为Resources(这是一个特殊文件夹)的文件夹下.

即假设您在名为Sprites的文件夹下有一个名为MySprite.png的精灵,该文件夹位于名为Resources的文件夹下.然后你会像这样加载它:

renderer.sprite = Resources.Load<Sprite>("Sprites/MySprite");
Run Code Online (Sandbox Code Playgroud)

(注意你不包括Resources文件夹和sprite的扩展名)

您可以在运行时加载资源文档中找到更多详细信息.


取消引用时,PPtr转换失败!

我做了一些搜索,并从这个论坛帖子中发现,当你有一个类型的列表然后将其更改为另一种类型时,通常会发生这种情况.即如果mySprites在某些时候GameObject []并且您链接了一堆Sprite,然后将其更改为Sprite [].而且由于它专门说Texture2D,我假设您的Sprites(或其中一些)的导入设置被设置为Texture而不是Sprite:

精灵导入设置


此外,所有MonoBehaviours都有一个名为renderer的字段,它是Renderer类型.我建议您重命名该字段以避免混淆,除非您仅将其用作示例.