Deniz Demir
Deniz Demir

Reputation: 281

How to reference overridden generic method local parameter?

I have a main class that looks like this:

public abstract class Soldier : Monobehaviour
{
public virtual T GetClosestEnemy<T>(T soldierType) where T : MonoBehaviour
{
    T[] soldiers;
    soldiers = FindObjectsOfType<T>(soldierType);
    T closestSoldier = null;
    float dist = Mathf.Infinity;
    Vector3 thisPos = transform.position;
    foreach(T soldier in soldiers)
    {
        print("looping");
        Vector3 difference = soldier.transform.position - thisPos;
        float currentDist = difference.sqrMagnitude;
        if (currentDist < dist)
        {
            print("found it");
            closestSoldier = soldier;
            dist = currentDist;
        }
    }
    print(closestSoldier.gameObject.name);
    return closestSoldier;
}
}

And here is the derived class:

public class GoodSoldier : Soldier
{
    public BadSoldier closestBadSoldier = null;

public override BadSoldier GetClosestEnemy<BadSoldier>(BadSoldier soldierType)
{
    
    return base.GetClosestEnemy(soldierType);
}
void Update()
{
     GetClosestEnemy<BadSoldier>(closestBadSoldier);
    
}
}

The base method works just fine. I reference it in the subclass and it also works just fine. It prints the right object's name. But closestBadSoldier is still null. How can that even be possible? I can't reference it in any other methods or it gives me a Null Reference Exception.

Upvotes: 0

Views: 64

Answers (1)

Wahid Bitar
Wahid Bitar

Reputation: 14100

Just update your overridden method to set the value to the variable

public override BadSoldier GetClosestEnemy<BadSoldier>(BadSoldier soldierType)
{
    closestBadSoldier = base.GetClosestEnemy(soldierType);
    return closestBadSoldier;
}

Upvotes: 0

Related Questions