2015-08-11 4 views
2

Это Sprite:Unity Sprite не меняется по команде?

enter image description here

Предполагается изменить в одну из этих спрайтов (в зависимости от того, что загружается)

enter image description here

Когда коллайдер (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; 
} 

Я попытался отправить всю необходимую информацию, пожалуйста, дайте мне знать, если мне нужно, чтобы включить Больше.

+0

Вы уверены, что 'setSprite' становится называется? Вы уверены, что «HealthManager.Health2» действительно связан с спрайтом Health2, а не с Health3 или чем-то еще? –

+0

setSprite вызывается (я опустил оператор печати в методе). Из того, что я прочитал (не эксперт по программированию менее года опыта), эта строка: gameObject.GetComponent (). Sprite = HealthManager.Health2; Должен вызвать health2. Я не уверен, как я могу проверить связь – Memj

+0

Что значит «Должен вызвать health2»? У вас действительно есть ваш спрайт Health2, связанный с «public static Sprite Health2» на вашем объекте HealthManager? – slumtrimpet

ответ

0

Вам необходимо прекратить использование статического электричества для этого. Кажется, что HealthManager.Health2 никогда не устанавливается ничем, кроме нулевого. Если я правильно интерпретирую ваши скриншоты, вы можете увидеть, что Sprite - это ничто на вашем нижнем снимке.

Кроме того, ваш код показывает, что вы действительно не хотите, чтобы атрибуты HealthManager были статическими. Вы хотите, чтобы реальный отдельный экземпляр HealthManager с независимыми значениями для здоровья на основе вашего использования здесь:

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

Никс все статические вещи на HealthManager, добавить реальный экземпляр HealthManager к вашему GameObject и связывает это Health1-3 спрайтов с реальными ссылки на ваши спрайты, и это должно сработать.

следующий синтаксис правильно если вы обновить HealthManager, как описано выше:

gameObject.GetComponent<SpriteRenderer>().sprite = HealthManager.Health2; 
Смежные вопросы