Unity Sprite没有改变命令?

时间:2015-08-11 02:23:41

标签: c# unity3d

这个精灵:

enter image description here

应该更改为其中一个Sprite(取决于加载的那个)

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 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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