
Also erstelle ich im Framework „I have Actions“ diese haben derzeit eine Liste von Bedingungen oder Überlegungen (gleiches Ding, anderer Name).
Während jede Bedingung einige der gleichen Funktionen aufweist wie zum Beispiel:
- Zurückgeben eines Float-Scores
- Verwenden einer Bewertungsformel
Sehen Sie sich den folgenden Code an:
Code: Select all
[CreateAssetMenu(fileName = "Consider my health vs max health",
menuName = "AnAppGames/AI/Example/Decisions/Health Consideration")]
public class MyHealth : BaseConsideration
{
private float health;
public float maxHealth;
public override float Consider(BaseAiContext context, BaseAction action, T value)
{
health = value as float;
return EvaluateValues(health / maxHealth);
}
}
Im weiteren Verlauf meiner Entwicklung musste ich nun die folgende Überlegung anstellen:
Code: Select all
public class DistanceFromMe : BaseConsideration
{
public float minRange;
public float maxRange;
private float ConsiderWithValues(Transform target, Transform caller)
{
return EvaluateValues(new FloatData(Vector3.Distance(target.transform.position, caller.position),
minRange,
maxRange).GetNormalizedData());
}
public override float Consider(BaseAiContext context, BaseAction action, T value)
{
Transform target = value as Transform;
if (target == null)
{
return 0;
}
return ConsiderWithValues(target.transform, context.transform);
}
public override float Consider(float x)
{
return EvaluateValues(new FloatData(x,
minRange,
maxRange).GetNormalizedData());
}
}
Was ich also brauche, ist, irgendwie verschiedene Arten von Parametern zur Consideration hinzuzufügen, aber diese Parameter variieren stark.
Ein weiteres Problem, das ich damit habe, ist, dass ich, wenn ich die Liste durchlaufe,... Ich kann nicht sagen, welche Parameter ich benötigte und wie ich die Anforderungen der Überlegung erfüllen konnte.
Ich habe über verschiedene Möglichkeiten nachgedacht, damit im Editor umzugehen, aber ich habe keine Ergebnisse gefunden. Was sollte ich als nächstes beachten?
Es ist erwähnenswert, dass es sich zum jetzigen Zeitpunkt jeweils um ScriptableObjects handelt. Ich bin nicht zu 100 % davon überzeugt, dass dies der Fall sein sollte, bin mir aber einfach nicht sicher, wie ich mit diesem Problem umgehen soll.
Mobile version