无法在实例化的预制件上启动协程

时间:2019-03-21 00:30:11

标签: unity3d

因此,当我单击按钮时,我正在播放器上的脚本上调用协程(我实例化后立即重命名的实例化预制件),他应该尝试攻击。

代码如下:

  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 个答案:

答案 0 :(得分:1)

我想出了答案!谢谢你们的提问,谢谢。 :) 问题确实出在我的onClick上。我是通过检查器进行设置的,因此是从预制件而不是实例中调用它的。

我要做的就是在脚本中分配它,并实际引用实例而不是预制实例。容易。

enemyButton1.GetComponent<Button>().onClick.AddListener(selectedPlayer.GetComponent<PlayerAttack>().AttackMonster);