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类型.我建议您重命名该字段以避免混淆,除非您仅将其用作示例.
| 归档时间: |
|
| 查看次数: |
34917 次 |
| 最近记录: |