Полиморфизм, обеспечивающий класс правильными переменными (Архитектура)C#

Место общения программистов C#
Ответить
Anonymous
 Полиморфизм, обеспечивающий класс правильными переменными (Архитектура)

Сообщение Anonymous »

Вот моя базовая архитектура:
Изображение

Итак, в рамках я создаю действия, в настоящее время у них есть список условий или соображений (одно и то же, другое имя).
Хотя каждое условие разделяет некоторые из те же функции, такие как:
  • Возврат плавающей оценки
  • Использование формулы оценки
Они реализуют их по-разному в зависимости от ситуации.
Взгляните на следующий код:

Код: Выделить всё

[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);
}

}
То, на что вы смотрите, — это моя первая попытка сделать своего рода «многоразовое» соображение.
Теперь, продолжая свою разработку, мне пришлось принять следующее соображение:

Код: Выделить всё

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());
}

}
И теперь начинаются проблемы, я подумал: «Это не масштабируемое решение». Как только мне нужно более одного общего параметра, я облажался, и мне приходится создавать дополнительные переопределения этой функции «Рассмотреть».
Итак, мне нужно каким-то образом добавить различные типы параметров в «Рассмотрение», однако эти параметры будут сильно различаться.
Еще одна проблема, с которой я сталкиваюсь, заключается в том, что когда я просматриваю список, я не смогу сказать, какие параметры мне нужны и как удовлетворить потребности Рассмотрения.
Я думал о разных способах справиться с этим внутри редактора, но ничего не нашел. Что мне следует рассмотреть дальше?
Стоит отметить, что на данный момент каждый из них является ScriptableObjects; Я не уверен на 100%, что так и должно быть, но просто не знаю, как справиться с этой проблемой.

Подробнее здесь: https://stackoverflow.com/questions/662 ... chitecture
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»