Экземпляры префаба не контролируются отдельно - PullRequest
1 голос
/ 05 ноября 2019

У меня есть несколько врагов, настроенных на уровне, все с одинаковым поведением и сценариями аниматора. Когда я бью или убиваю одного из них, их всех убивают или убивают. Мне нужно, чтобы они работали как отдельные экземпляры.

Я пытался ссылаться только на экземпляр скрипта:

 private GoblinBehaviour goblin;
  goblin = GetComponent<GoblinBehaviour>();
        goblin.IncrementHits(1);

Но это не работает. Возникает ошибка, которая говорит о том, что скрипт не может быть доступен с экземпляром, и ему нужен тип.

код для сценария обнаружения попаданий:

   public class RangedDetection : MonoBehaviour
   {
   private GoblinBehaviour goblin;
   void OnTriggerEnter(Collider other)
    {
    //on colliding destroy rocks after its life time
    Destroy(gameObject, rockLifeTime);

    if (other.gameObject.tag.Equals("Enemy"))
    //if (other.tag == "Enemy")
    {
        Destroy(other.gameObject);
    }
    else if (other.gameObject.tag.Equals("Goblin"))//goblin should play 
 death animation
    {
       goblin = GetComponent<GoblinBehaviour>();
        goblin.IncrementHits(1);
        GetComponent<BoxCollider>().enabled = false; //Removing hit 
 collider so it only hits target once.
    }
 }
 }

Упрощенный код для сценария гоблинов:

 public class GoblinBehaviour : MonoBehaviour
 {
Transform player;

public static bool isDead;
public static bool isPunching;
public static bool isHit;
public GameObject particles;
public Animator anim;


 public void IncrementHits(int hitCount)
 {
    isHit = true;
    hits += hitCount;
    if (hits >= 2) isDead = true;


}

void Die()
{
    Instantiate(particles, transform.position, transform.rotation);
    Destroy(gameObject);

}


void updateAnim()
{
    anim.SetBool("Punch_b", isPunching);
    anim.SetBool("hit", isHit);

}

}

Вещи должны анимироваться и действовать отдельно, я не уверен, какссылаться только на текущий экземпляр скрипта.

1 Ответ

1 голос
/ 05 ноября 2019

Хотя ваш код неполон, и о проблеме нельзя сказать наверняка, похоже, вы используете статику неправильно.

Статические свойства экземпляра аналогичны. Другими словами, все ваши экземпляры гоблинов имеют общие статические свойства (isPunching, isHit, isDead и т. Д.). Если эти значения статичны, вы можете ссылаться на них напрямую, без необходимости получать экземпляр, на который вы воздействуете, но в результате вы обновляете все гоблины сразу.

Ваше решение будет включать удаление статического модификатора из ваших свойств GoblinBehaviour, если толькосвойства должны быть общими для всех экземпляров.

...