Home > database >  IEnumerator script is not working and Coroutine is not running? Unity,C#
IEnumerator script is not working and Coroutine is not running? Unity,C#

Time:09-05

I am writing a script for Enemy in my game, where they will attack hero using Coroutine at a certain interval. Though, while running the game, Enemy is not attacking. I have created two events for enemy animation specific for attack. The IE numerator part of code is not running. Can anyone tell what is going wrong?

I wrote Debug.Log("Hello"), to verify if it executes but it doesn't print.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyAttack : MonoBehaviour
{
    [SerializeField] private float range = 3f;
    [SerializeField] private float timeBetweenAttacks = 1f;

    private Animator anim;
    private GameObject player;
    private bool playerInRange;
    private BoxCollider[] weaponColliders;

    // Start is called before the first frame update
    void Start()
    {
        weaponColliders = GetComponentInChildren <BoxCollider[]> ();
        player = GameManager.instance.Player;        
        anim = GetComponent <Animator> ();
        StartCoroutine (attack());
    }

    // Update is called once per frame
    void Update()
    {
        if(Vector3.Distance(transform.position,GameManager.instance.Player.transform.position) < range)
        {
            playerInRange = true;
        }else{
           playerInRange = false;
        }
        
    }

    public IEnumerator attack()
    {
        Debug.Log("Hello");
        if(playerInRange && !GameManager.instance.GameOver)
        {
            anim.Play("Attack");
            yield return new WaitForSeconds(timeBetweenAttacks);
        }
        yield return null;
        StartCoroutine(attack());        
    }

    public void EnemyBeginAttack(){
        foreach(var weapon in weaponColliders){
            weapon.enabled = true;
        }
    }

    public void EnemyEndAttack(){
        foreach(var weapon in weaponColliders){
            weapon.enabled = false;
        }
    }
}

CodePudding user response:

The issue is likely the code weaponColliders = GetComponentInChildren<BoxCollider[]>();. GetComponentInChildren should only be called with component types (or interface types), but BoxCollider[] is an array type.

You should instead use GetComponentsInChildren<BoxCollider>();.

CodePudding user response:

I tried writing BoxCollider weaponColliders = GetComponentInChildren <BoxCollider> (); then the error went away. Any reason?

  • Related