Unity Sprite没有改变命令?

这个雪碧:

enter image description here

应该变成这些精灵中的一个(取决于加载的精灵)

enter image description here

当Collider(LoseCollider)与另一个游戏对象联系时:

enter image description here

我的问题是,当LoseCollider被触发时,Spite没有改变,并且没有任何错误被抛向我 .

相关代码是:

HealthManager.cs

public static Sprite[] healthSprites;
public static int totalHealth = 3;

public static Sprite Health1; 
public static Sprite Health2;
public static Sprite Health3;

LoseCollider.cs

void OnTriggerEnter2D (Collider2D trigger) {
    if (HealthManager.totalHealth == 3) {
        setSprite();
        HealthManager.totalHealth --;
    } else {
        levelManager = GameObject.FindObjectOfType<LevelManager>();
        levelManager.LoadLevel("Lose");
    }
}

void setSprite () {
    gameObject.GetComponent<SpriteRenderer>().sprite = HealthManager.Health2;
}

我试图发布所有相关信息,如果我需要包含更多信息,请告诉我 .

回答(1)

2 years ago

你需要停止使用静态 . 似乎HealthManager.Health2永远不会设置为除null之外的任何内容 . 如果我正确地解释你的截图,你可以看到底部镜头中的Sprite是None .

此外,您的代码似乎表明您确实不希望HealthManager属性是静态的 . 您希望HealthManager的实际单独实例具有基于您的用法的独立 Health 值:

if (HealthManager.totalHealth == 3) {
    setSprite();
    HealthManager.totalHealth --;

Nix HealthManager上的所有静态内容,将一个真实的HealthManager实例添加到您的GameObject中,并将它的Health1-3精灵与您的精灵的实际引用相关联,它应该可以工作 .

假设您如上所述更新HealthManager,以下语法是正确的:

gameObject.GetComponent<SpriteRenderer>().sprite = HealthManager.Health2;