Polymorphismus, der eine Klasse mit den richtigen Variablen versorgt (Architektur)C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Polymorphismus, der eine Klasse mit den richtigen Variablen versorgt (Architektur)

Post by Anonymous »

Hier ist meine grundlegende Architektur:
Image

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
Sie implementieren diese je nach Situation auf sehr unterschiedliche Weise.
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);
}

}
Was Sie sehen, ist mein erster Versuch, eine Art „wiederverwendbare“ Überlegung anzustellen.
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());
}

}
Und jetzt fängt das Problem an. Ich dachte: „Das ist keine skalierbare Lösung.“ Sobald ich mehr als einen generischen Parameter benötige, bin ich am Arsch und muss zusätzliche Überschreibungen dieser Consideration-Funktion erstellen.
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.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post