Не удается запустить сопрограмму на конкретном сборном - PullRequest
0 голосов
/ 21 марта 2019

Итак, когда я нажимаю кнопку, я вызываю сопрограмму для скрипта, который на моем плеере (созданный экземпляр префаба, который я переименовал, как только его экземпляр), и он должен попытаться атаковать.

код выглядит следующим образом:

  public void AttackMonster()
  {
     StartCoroutine(TryAttack());
  }

  IEnumerator TryAttack()
  {
     var attacker = references.GetComponent<References>()
       .selectedPlayer.GetComponent<CharacterTemplate>();
     var enemyName = EventSystem.current.currentSelectedGameObject
       .GetComponentInChildren<Text>().text;
     var enemy = GameObject.Find(enemyName);
     var speed = attacker.speed;
     var accuracy = attacker.accuracy;
     var strength = attacker.strength;
     var enemyDefense = enemy.GetComponent<EnemyInfo>().defense;

     for (int i = 0; i < speed; i++) 
     {           
        yield return new WaitForSeconds(1);
        var accuracyTry = Random.Range(1, 11); 
        if (accuracyTry >= accuracy)
        {
           FloatingMessage("Hit");
          if (Hit(strength, enemyDefense))
          {
             Debug.Log("Wound");
          } 
          else 
          {
             Debug.Log("No wound");
          }
     } 
     else 
     {
        FloatingMessage("Miss");
     }
 }

И я получаю сообщение об ошибке:

Не удалось запустить сопрограмму, поскольку игровой объект Player_prefab неактивен!

Я сделал несколько Debug.Break, чтобы проверить, был ли созданный игрок неактивен, но это не так.Кажется, что кнопки onClick () вызывают эту функцию из префаба, а не из экземпляра или чего-то подобного.

Есть идеи?

1 Ответ

1 голос
/ 21 марта 2019

Я разобрался с ответом! И это было благодаря вашим вопросам, ребята, так что спасибо. :) Проблема действительно была на моем onClick. Я устанавливал это через инспектора, таким образом это вызывалось из сборного дома, а не экземпляров.

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

enemyButton1.GetComponent<Button>().onClick.AddListener(selectedPlayer.GetComponent<PlayerAttack>().AttackMonster);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...