Reputation: 281
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
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