NightTerror04
NightTerror04

Reputation: 11

'Component.GetComponent<T>()' is a method, which is not valid in the given context [Assembly-CSharp]csharp(CS0119)

When I try to get a variable from another script I get the error 'Component.GetComponent<T>()' is a method, which is not valid in the given context [Assembly-CSharp]csharp(CS0119)

The code that's throwing the error is here GetComponent<EnemyAI>.Attack();

Any help or suggestions is greatly appreciated,

Upvotes: 1

Views: 838

Answers (1)

KiynL
KiynL

Reputation: 4266

In fact, you can't get the component class just by writing the type in any code, and to do this you need to have an instance of the enemyAI gameObject as a reference. In this solution The easiest way to do this is to use GameObject.FindObjectOfType<>() like the code below:

public EnemyAI enemyAI; // define a variable for enemyAI

public void Start()
{
    enemyAI = FindObjectOfType<EnemyAI>(); // it will find your enemyAI script gameObject
}

Once the game is begining, EnemyAI is stored in that variable, and you have access to the class properties. And you can easily run the methods.

private void OnNearEnemy()
{
    enemyAI.Attack(); // call attack function

    enemyAI.power += 10f; // add some power for example...
}

Now if you have another component like Rigidbody or Animator in EnemyAI, you can easily call and access it with GetComponent<>().

public void ForceEnemyToEscape()
{
    var enemyAgent = enemyAI.GetComponent<NavMeshAgent>(); // get nav mesh

    enemyAgent.destination = transform.position + transform.forward * 10f;
}

However, I suggest you learn object-oriented programming topics well. Because many calls can be made inside the enemy class. I hope it helped.

Upvotes: 0

Related Questions