2016-05-07 60 views
3

在统一中,我使用脚本随机创建攻击玩家的敌人。要做到这一点,我需要插入一个游戏对象添加SpriteRenderer命名为,然后给它的纹理这是资产运行系统中的精灵渲染器中的Unity Change sprite

这里是我的代码:

GameObject sprGameObj = new GameObject(); 
sprGameObj.AddComponent<SpriteRenderer>(); 
sprGameObj.name = "Enemy"; 

sprGameObj.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("EnemyImage"); 

的代码插入一个游戏对象,增加了精灵渲染器并将其命名为但并不像“EnemyImage”添加到雪碧。我在网上看过,但其他人都在使用类似于我的代码,但这也不起作用。

有谁知道解决方案吗?

我在C#中编码。


更新:

我试图把这个代码已经存在的精灵里面,它只是删除它的形象:

gameObject.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>("EnemyImage"); 

莫不是与图像本身有问题?

回答

2

首先,我建议使用某种配置对象来进行组织和名称无关的资产存储。在这种情况下,您可以在该配置中注册所有使用的图形文件,并通过调用诸如“Config.SpritesData.GetEnemySprite(EnemyType.Orc)”之类的方式来获取所需的资产。 但是现在您可以通过在Assets文件夹中检查精灵的路径来开始,因为Resources.Load仅适用于Resources文件夹中的文件。如果路径是正确的,资产导入类型也值得检查,因为负载<>()方法正在将其转换为Sprite,所以如果您的资产未导入为精灵,则投射结果可能为空。 让我知道如果你检查了这两件事情,但它仍然无效,我会给它更多的想法。

+0

好吧,我可能会遇到文件路径问题。我可以尝试使用“assets/EnemyImage”之类的东西吗? – Andrew

+0

感谢您的帮助。我意识到,我认为资产文件夹是“资源”文件夹,并把我的形象放在那里。我认为资源只是意味着资产。为了解决这个问题,我把图像放在一个名为resources的文件夹中。感谢您的帮助。我会尽量不要在下次犯这样的错误。 – Andrew

+1

另一个提示:'Resources.Load <>()'只适用于设置为单个的精灵。如果你有一个设置为多个,你需要使用'Resources.LoadAll <>()'。 –