// 1. 定义评分上下文
public struct DecisionContext {
public Vector3 Origin; // 决策者位置
public EntityType SelfType; // 决策者类型
public List<string> PlayerTags; // 玩家当前的流派标签
// ... 其他共享数据
}
// 2. 评分器接口
public interface IScorer<T> {
float Evaluate(T candidate, DecisionContext context);
}
// 3. 具体评分器实现:距离评分
public class DistanceScorer : IScorer<Enemy> {
private float _weight;
public DistanceScorer(float weight) { _weight = weight; }
public float Evaluate(Enemy target, DecisionContext context) {
float dist = Vector3.Distance(context.Origin, target.Position);
// 距离越近分越高,使用 1/x 曲线
return (1f / Mathf.Max(dist, 0.1f)) * _weight;
}
}
// 4. 决策引擎
public class DecisionEngine<T> {
private List<IScorer<T>> _scorers = new List<IScorer<T>>();
public void AddScorer(IScorer<T> scorer) { _scorers.Add(scorer); }
// 模式 A: 选最好的 (用于 AI)
public T SelectBest(List<T> candidates, DecisionContext context) {
T bestCandidate = default;
float bestScore = float.MinValue;
foreach (var candidate in candidates) {
float currentScore = 0f;
foreach (var scorer in _scorers) {
currentScore += scorer.Evaluate(candidate, context);
}
if (currentScore > bestScore) {
bestScore = currentScore;
bestCandidate = candidate;
}
}
return bestCandidate;
}
// 模式 B: 加权随机 (用于抽卡)
public T SelectRandom(List<T> candidates, DecisionContext context) {
// 实现标准的加权随机算法 (Roulette Wheel Selection)
// ...
return default;
}
}