Правильное использование сторонних библиотек, скриптов в unity3d - PullRequest
0 голосов
/ 01 мая 2018

Это должен быть простой вопрос для любого опытного разработчика 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; использование 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 #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...