加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:23:19 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个负责创建和显示不同精灵的对象,因此我想以编程方式直接访问资源/精灵,而不是在该对象下的层次结构中拖放一个精灵. 有一种方式可以通过编程方式创建一个新的精灵,并分配我在资产文件夹中的内容? 我也希望有一种数据结构,在游戏开始时加载
我正在尝试创建一个负责创建和显示不同精灵的对象,因此我想以编程方式直接访问资源/精灵,而不是在该对象下的层次结构中拖放一个精灵.

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

我也希望有一种数据结构,在游戏开始时加载了几个图像,一个数组或一个字典或类似的东西,所以我可以根据需要显示的图像的某些情况进行更改.但是,自从我刚刚接触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 renderer是Renderer,我建议你重命名该字段以避免混淆,除非你只是以此为例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读