C#Unity - 从Sprite表更改Sprite

时间:2016-09-11 17:40:11

标签: c# unity3d sprite sprite-sheet

我已经开始制作一款新游戏了,我希望根据我给它的字母或数字来改变精灵表中的字母。我在Photoshop中创建了一个只有数字的精灵表来测试它并将其作为Sprite导入Unity。然后在脚本中我做了这个:

public string currLetter;

public string lettersName;

Sprite[] lettersAll;

void Awake () {

    lettersAll = Resources.LoadAll<Sprite> ("Textures/" + lettersName);
}

void Update () {

    switch (currLetter) {

    case "0":
        gameObject.GetComponent<SpriteRenderer> ().sprite = lettersAll[0];
        break;

    case "0":
        gameObject.GetComponent<SpriteRenderer> ().sprite = lettersAll[1];
        break;
    }
}

<小时/> 我在switch语句中得到一个错误,如果它是例如数字1,它表示数组索引超出范围,当我将lettersAll设置为public时,它有0个精灵。我究竟做错了什么 ?我一直试图解决这个问题,但没有任何作用:/

更新:
Sprite Sheet的图片:

enter image description here

2 个答案:

答案 0 :(得分:0)

你的spritesheet是&#34;资源&#34;夹? 对于你的情况,精灵文件应该在&#34; Resources / Textures /&#34;

之下

更新: 我能够复制问题并通过确保以下事项正确解决它:

  1. / Resources文件夹下的Spritesheet
  2. 您正在加载的spritesheet内部有多个精灵。如果你看到这里发布的截图,spritesheet A,B,C,D 不会加载,因为他们内部没有精灵,即使 模式设置为多个。 Spritesheet E将正确加载
  3. Spritesheet image

答案 1 :(得分:0)

精灵表的精灵不能像这样被访问,因为精灵表本身就是一个纹理。

  

Unity在内部将其视为纹理,同时允许您将其设置为多个并将其分解,只能通过指定的引用访问它。

我建议不要将图片放在参考资料中,因为它会在游戏开始时立即加载,而不是根据需要加载。 试试这个

之后的UI Sprite Manager