Я пытаюсь полностью скопировать (публичные + защищенные + частные переменные) один из моих скриптов в другой игровой объект во время выполнения, но скрипты имеют абстрактный родительский тип, и во время выполнения скрипта я ссылаюсь на них как на абстрактный родительский тип, а не как на абстрактный родительский тип. дочерние классы, как и любые дочерние, есть ли способ сделать это? или, может быть, есть более эффективный способ сделать это? Я пытаюсь сделать это, чтобы отображались предварительные просмотры турелей на моем корабле - каждый корабль может иметь несколько сценариев турелей, но во время одного из меню я просматриваю их все и пытаюсь скопировать их в игровой объект PreviewShip, который затем будет быть показан.
У меня есть следующая иерархия сценариев:
TurretController (абстрактный родительский элемент) -> (дочерние сценарии реализованы) Arc, Square, Single, Строки, Omni.
Код: Выделить всё
public void CopyTurret(GameObject turrets, TurretController turretToKeep)
{
// REPLACE the current turrets with an instantiated copy of the turrets argument
Destroy(transform.Find("Turrets").gameObject);
Instantiate(original: turrets, parent: transform);
/* go through all the turrets, and remove the ones that arent the turret name to
only get the specific turret on the ship */
foreach (TurretController turret in GetComponentsInChildren())
if (turret != turretToKeep)
Destroy(turret);
}
Это не сработало, потому что я попробовал turretToKeep как TurretController (абстрактный родительский элемент) и как строку (сравнивая имена скриптов), но оба раза цикл foreach заканчивался удалением каждого скрипта, а не только сохраните один.
Код: Выделить всё
public static void CopyComponent(this Component comp, GameObject destination, bool copyVariables) where T : Component
{
destination.AddComponent(typeof(T));
}
Я также попробовал этот метод расширения, но он копировал базовую версию сценария, а не обновленную версию (обновленные переменные), которая существует на корабле во время выполнения.
Подробнее здесь:
https://stackoverflow.com/questions/792 ... t-in-unity