这个精灵:
应该变成这些精灵之一(取决于所加载的精灵)
当对撞机(LoseCollider)与其他游戏对象接触时:
我的问题是,当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;