Правильное использование сторонних библиотек, скриптов в unity3d

Это должен быть простой вопрос для любого опытного разработчика в unity / C#, но мой недостаток опыта вынуждает меня спросить.

Я недавно купил Infinite Runner Engine у ​​More Mountains - скрипт, который должен был запустить мой проект, но я борюсь ...

Я пытаюсь отделить их код от своего собственного, поэтому после обновления я могу легко заменить его, не нанося (слишком большого) ущерба.

Вот вопрос:

Возьмем, к примеру, их скрипт LevelManager:

using MoreMountains.Tools;

namespace MoreMountains.InfiniteRunnerEngine
{
    public class LevelManager : Singleton<LevelManager>
    {
        // default methods
        protected virtual void PrepareStart() {}
        protected virtual IEnumerator PrepareStartCountdown() {}
        public virtual void LevelStart() {}
        .... and so on...
    }
}

Чтобы избежать повреждения при обновлении, я подумал о том, чтобы сделать это так

using MoreMountains.Tools;
using MoreMountains.InfiniteRunnerEngine;

namespace MyNamespace.Test
{
    public class TestLevelManager : LevelManager
    {
        // custom property
        public GameObject TestGameObject;

        // Overrides to existing methods
        protected override void PrepareStart() {}
        protected override IEnumerator PrepareStartCountdown() {}
        public override void LevelStart() {}
        .... and so on...
    }
}

Я понял, что таким образом я не смогу добавлять какие-либо собственные методы в класс TestLevelManager.

Есть ли у кого-нибудь совет, как правильно организовать код?

Можно ли просто использовать существующие методы в своих классах и переопределить только те, которые уже существуют, а затем создать дополнительные классы для методов, которые мне нужны? Звучит слишком грязно.

Я мог бы получить:

  • LevelManager, который содержит ожидаемые методы,
  • TestLevelManager, который переопределяет их методы LevelManager, как в примере выше.
  • TestLevelManagerExtra, который содержит все дополнительные методы, которые мне нужны для игры, например

Это будет мой третий пример файла дополнительных методов, который я бы использовал с помощью MoreMountains.Tools; using MoreMountains.InfiniteRunnerEngine;

namespace MyNamespace.Test
{

    public class TestLevelManagerExtra : Singleton<TestLevelManagerExtra>
    {
        // store relation to my overriding class
        public TestLevelManager testLevelManager;

        // when class is initiated it should find
        // my class and store it in testLevelManager variable
        public virtual void Start()
        {
            testLevelManager = gameObject.GetComponent<TestLevelManager>();
        }

        // custom method to be used outside of this class
        // it should let me access properties in TestLevelManager 
        public void AccessTestGameObject(bool state)
        {
            testLevelManager.SetActive(state);
        }

        public void CustomMethod1() {}
    }
}

Извините за неправильную терминологию, использованную в вопросе, как я уже сказал, я плохо разбираюсь в C#.

Я понял, что таким образом я не смогу добавлять какие-либо собственные методы в класс TestLevelManager., а почему? Я не являюсь пользователем Unity, но вы можете добавить любые методы в TestLevelManager?
Liam 01.05.2018 12:58

Возможно, тогда что-то было не так. Когда я добавляю такой собственный метод, я могу вызывать его внутри себя, но внешне он недоступен ...

Goran Usljebrka 01.05.2018 13:00

Вы не можете добавлять какие-либо переопределения, потому что они не реализованы в базе, но вы можете добавить любой метод, который хотите, только не используйте ключевое слово override.

Liam 01.05.2018 13:00

"но внешне это недостижимо" вы можете показать пример? Вы набираете это "внешнее" как TestLevelManager или LevelManager?

Liam 01.05.2018 13:01

Есть ли способ получить доступ к этим новым методам извне? Если я попытаюсь получить доступ к этому: LevelManager.Instance.PrepareStart (), он сработает. Если я попытаюсь получить доступ к этому: TestLevelManager.Instance.CustomMethod (), он скажет, что CustomMethod не определен в LevelManager, да, комментарии не стилизованы ...

Goran Usljebrka 01.05.2018 13:03

У меня есть класс, назовем его GameManager, из которого я получаю доступ к LevelManager. Я могу получить доступ к LevelManager.Instance.method (), но не могу получить доступ к LevelManager.Instance.customMethod () или TestLevelManager.Instance.customMethod ()

Goran Usljebrka 01.05.2018 13:14

Позвольте нам продолжить обсуждение в чате.

Goran Usljebrka 01.05.2018 13:16

Похоже, что класс Singleton (который, похоже, наследуется от monobehaviour) определен неправильно. Кажется, что одноэлементный класс не поддерживает наследование должным образом. У меня сама была эта проблема при создании собственного синглтон-класса, но мне удалось найти решение для нее. Дайте мне знать, если у вас все еще есть проблема, так как это может быть решением.

Immorality 01.05.2018 14:30

@ Безнравственность Я найду способ обойти свои обходные пути. :-) Я надеюсь увидеть, есть ли хороший способ сделать это, например как люди используют сторонние библиотеки. прямо сейчас я использую 2 класса на один базовый класс, один для его переопределения, а второй для добавления новых методов. Скорее всего, я посмотрю любые фрагменты / скриншоты, которые у вас есть.

Goran Usljebrka 01.05.2018 15:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
121
0

Другие вопросы по теме