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

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

有一种方式可以通过编程方式创建一个新的精灵,并分配我在资产文件夹中的内容

我也希望有一种数据结构,在游戏开始时加载了几个图像,一个数组或一个字典或类似的东西,所以我可以根据需要显示的图像的某些情况进行更改.但是,自从我刚刚接触Unity以来,令我困惑的是如何使用assets文件夹以编程方式创建一个精灵参考.

编辑进度:

我创建了一个这样的精灵数组:

public Sprite[] mySprites;

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

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

public SpriteRenderer renderer;
renderer = transform.GetComponent<SpriteRenderer>();
renderer.sprite = (Sprite)mySprites [0];

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

“解除引用时PPtr转换失败!从Texture2D到Sprite的Castin!”

我得到这个错误,即使没有投射(Sprite)和btw我不知道为什么他告诉我的关于Texture2D,因为任何东西都被设置为精灵

解决方法

以编程方式创建精灵可能有点太难做了.您可能需要在内存中创建一个纹理,填写数据,然后将该纹理写在磁盘上.之后,您应该可以使用C#的文件或Unity的 WWW.LoadFromCacheOrDownload来阅读.

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

要以编程方式加载您的精灵(而不是动态创建的),它们需要位于名为Resources(即special folder)的文件夹下.

即假设您有一个名为MySprite.png的精灵,名为Sprites的文件夹,名为Resources的文件夹.然后你会加载它:

renderer.sprite = Resources.Load<Sprite>("Sprites/MySprite");

(注意如何不包括资源文件夹和sprite的扩展名)

您可以在Loading Resources at Runtime文档中找到更多详细信息.

PPtr cast Failed when dereferencing!

我做了一些搜索,从this forum post发现,通常情况下,当您有一个类型的列表,然后将其更改为另一种类型.即如果mySprites在某个点GameObject [],并且你链接了一堆Sprite,然后将其更改为Sprite [].而且由于具体说是Texture2D,我假定您的Sprites(或其中一些)的导入设置被设置为Texture而不是Sprite:

另外all MonoBehaviours have already a field named rendererRenderer,我建议你重命名该字段以避免混淆,除非你只是以此为例.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...