Sie sind auf dem richtigen Weg. Sie können das BaseDamage-Skript an dasselbe Spielobjekt anhängen, an das das SpellDamage-Skript angehängt ist.
Sie haben das Attribut Serializable
hinzugefügt. Was Sie tun müssen, ist eine benutzerdefinierte Eigenschaft Schublade für BaseDamage
Klasse in Editor Ordner zu schreiben.
Etwas wie folgt aus:
[CustomPropertyDrawer(typeof(BaseDamage))]
public class BaseDamageDrawer : PropertyDrawer
{
static string[] propNames = new[]
{
"MaximumDamage",
"MinimumDamage",
"SpellScaling",
};
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
// Using BeginProperty/EndProperty on the parent property means that
// prefab override logic works on the entire property.
EditorGUI.BeginProperty(position, label, property);
// Draw label
position = EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label);
// Don't make child fields be indented
var indent = EditorGUI.indentLevel;
EditorGUI.indentLevel = 0;
SerializedProperty[] props = new SerializedProperty[propNames.Length];
for (int i = 0; i < props.Length; i++)
{
props[i] = property.FindPropertyRelative(propNames[i]);
}
// Calculate rects
float x = position.x;
float y = position.y;
float w = position.width/props.Length;
float h = position.height;
for (int i = 0; i < props.Length; i++)
{
var rect = new Rect(x, y, w, h);
EditorGUI.PropertyField(rect, props[i], GUIContent.none);
x += position.width/props.Length;
}
// Set indent back to what it was
EditorGUI.indentLevel = indent;
EditorGUI.EndProperty();
}
Ich bin nicht sicher, ob das möglich ist, aber wenn ja, es höchstwahrscheinlich erfordert einige benutzerdefinierte Editor Skripte. Eine Option wäre auch, 'SpellDamage' von' BaseDamage' zu erben (diese Klasse benötigt übrigens 'Serializable' nicht). –
Auch wenn es erbt, habe ich noch die 'SpellDamage' Klasse in einer anderen Klasse, so dass es immer noch unmöglich ist, es aus dem Editor zu instanziieren – PetqImaQkaputka
In diesem Fall sollten Sie sich daran erinnern, dass die Einheit ein komponentenbasiertes System ist. Machen Sie die 'Damage'-Klasse zu einer Komponente (verbinden Sie diese einfach mit dem entsprechenden Spielobjekt (z. B. dem Player) und legen Sie die Werte fest) und lassen Sie andere Skripte einen Verweis auf diese Komponente haben. –