Как создать объект дерева графика с различными действиями без наследования (например, простой ScriptableObject)?C#

Место общения программистов C#
Ответить
Anonymous
 Как создать объект дерева графика с различными действиями без наследования (например, простой ScriptableObject)?

Сообщение Anonymous »

Мне нужно создать игровое событие с разными действиями, как в игре Slay the Spire (см. фото ниже).
Изображение

Объект должен содержать список действий (например, передать какой-либо предмет игрок или что-то еще). При выборе какого-либо действия событие может продолжаться, поэтому у вас будет: новый конкретный текст для этого выбора, новые кнопки с действиями.
Проблема состоит в том, чтобы сделать сложную структуру текстов и действий (действий). это самая сложная часть) без использования нелепого количества классов для каждого свернутого события.
Однако простое решение — написать класс для каждого события:

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

public class PlotRoom : MonoBehaviour
{
[SerializedField] private Text textField;

// Imagine some object that can create buttons by actions
[SerializedField] private ButtonsContainer buttons;

[SerializedField] private List texts; // Same length as actionGroups
private abstract List actionGroups { get; }

protected void Quit() { //quit the  plot }

protected void UpdatePlot(int group)
{
textField.text = texts[group];
buttons.Spawn(actionGroups[group])
}
}

public class Plot1 : PlotRoom
{
protected override List actionGroups => new()
{
new () { SomeAction1, SomeAction2, Quit },
new () { SomeAction2, Quit }
}

private void SomeAction1()
{
DoSomething();
UpdatePlot(1);
}

private void SomeAction2()
{
DoSomethigElse();
Quit();
}
}

public class Plot2 : PlotRoom
{
// ...
}
Есть ли другой способ создания таких групп без создания большого количества классов? Или есть способ обновить существующее решение?

Подробнее здесь: https://stackoverflow.com/questions/786 ... riting-e-g
Ответить

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

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

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

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

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