有一种方式可以通过编程方式创建一个新的精灵,并分配我在资产文件夹中的内容?
我也希望有一种数据结构,在游戏开始时加载了几个图像,一个数组或一个字典或类似的东西,所以我可以根据需要显示的图像的某些情况进行更改.但是,自从我刚刚接触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,因为任何东西都被设置为精灵
解决方法
以下是如何动态创建纹理: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");
您可以在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,我建议你重命名该字段以避免混淆,除非你只是以此为例.