微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,我建议你重命名该字段以避免混淆,除非你只是以此为例.

原文地址:https://www.jb51.cc/csharp/95751.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐