Balance Parameters
Balancing-Parameter sind Werte im Spiel, die vom Balancing Framework erkannt und im externen Tool analysiert oder angepasst werden können.
Damit ein Wert als Balancing-Parameter behandelt wird, muss das Feld mit dem Attribut BalanceParameter markiert werden.
Überblick
Es gibt zwei Arten von Balancing-Parametern:
- Einfache Parameter
Werte vom Typintoderfloat. - Erweiterte Parameter
Eigene Datentypen, die das InterfaceIBalanceParameterimplementieren.
Beispiel
[SerializeField, BalanceParameter]
private int health;
[SerializeField, BalanceParameter]
private float speed;
Alle Felder, die mit BalanceParameter markiert sind, werden vom Framework automatisch erkannt.
Unterstützte Datentypen
Aktuell unterstützt das Framework folgende Datentypen:
- int
- float
Andere Datentypen werden nicht automatisch erkannt.
Anmerkung
Wenn ein nicht unterstützter Typ verwendet wird, gibt das Framework eine Warnung im Unity-Console-Log aus.
Verwendung in Entitäten
Balancing-Parameter müssen sich in einem Objekt befinden, das als balancierbare Entität definiert ist.
Beispiel:
public class EnemyStats : ScriptableObject, IBalanceableObject
{
[SerializeField] private string entityID;
[SerializeField] private string displayName;
[SerializeField] private string category;
[SerializeField] private string description;
[BalanceParameter]
private int health;
[BalanceParameter]
private float speed;
public EntityDescriptor Descriptor => new EntityDescriptor(
entityID,
displayName,
category,
description
);
}
Optionale Attributeinstellungen
Das Attribut BalanceParameter kann optional mit zusätzlichen Informationen versehen werden.
Zum Beispiel kann ein eigener Anzeigename definiert werden:
[BalanceParameter(DisplayName = "Enemy Health")]
private int health;
Dadurch wird im Balancing Tool nicht der Feldname Health, sondern der Anzeigename Enemy Health verwendet.
Optional kann außerdem ein eigener Schlüssel (Key) angegeben werden:
[BalanceParameter(Key = "enemy_health", DisplayName = "Enemy Health")]
private int health;
Anzeige im Balancing Tool
Jeder erkannte Parameter wird im externen Tool als eigener Balancing-Wert angezeigt.
Die Parameter werden dabei automatisch der jeweiligen Entität zugeordnet.
Erweiterte Parametertypen
Neben einfachen Parametern vom Typ int und float unterstützt das Balancing Framework auch komplexere Parametertypen.
Hierfür kann ein Datentyp das Interface IBalanceParameter implementieren.
Dieses Interface erlaubt es, eigene Parameterstrukturen in das Balancing-System zu integrieren.
public interface IBalanceParameter
{
BalanceParameterType ParameterType { get; }
BalanceValueType ValueType { get; }
object GetBaseValue();
bool SetBaseValue(object value);
int GetNestedValueCount();
object GetNestedValue(int index);
bool SetNestedValue(int index, object value);
}
Solche Parameter können beispielsweise verwendet werden, um Werte mit mehreren Stufen oder Upgrades abzubilden.
Beispiel
Ein typischer Anwendungsfall sind Werte mit Upgrade-Stufen, bei denen ein Basiswert und mehrere Upgrade-Level existieren.
[SerializeField, BalanceParameter]
private UpgradeableFloat damage;
Das Balancing Framework erkennt automatisch:
- den Basiswert
- alle Upgrade-Werte