这个精灵:

c# - Unity Sprite是否在命令上未更改?-LMLPHP

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

c# - Unity Sprite是否在命令上未更改?-LMLPHP

当对撞机(LoseCollider)与其他游戏对象接触时:

c# - Unity Sprite是否在命令上未更改?-LMLPHP

我的问题是,当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;
}


我试图发布所有相关信息,如果需要添加更多信息,请告诉我。

最佳答案

您需要为此停止使用静态。看来HealthManager.Health2从未设置为null以外的任何值。如果我正确地解释了您的屏幕截图,您的下图可以看到Sprite is None。

另外,您的代码似乎表明您确实不希望HealthManager属性是静态的。您需要根据您的使用情况使用独立的健康值的HealthManager的真正单独实例:

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


在HealthManager上消除所有静态内容,将真实的HealthManager实例添加到您的GameObject中,并将其Health1-3子画面与对子画面的真实引用相关联,并且它应该可以工作。

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

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

09-09 20:47