title: Properly using 3rd party libraries, scripts in unity3d
body: <p>This should be a simple question for any experienced developer in unity/c#, but my lack of experience is forcing me to ask.</p>
  
  <p>I recently purchased Infinite Runner Engine from More Mountains - a script that should have kickstarted my project but I'm struggling...</p>
  
  <p>I'm trying to separate their code from my own so once there is an update I can easily swap it without making (too much) damage.</p>
  
  <p><strong>Here's the question:</strong></p>
  
  <p>Let's take for example their LevelManager script:</p>
  
  <pre><code>using MoreMountains.Tools;
  
  namespace MoreMountains.InfiniteRunnerEngine
  {
      public class LevelManager : Singleton&lt;LevelManager&gt;
      {
          // default methods
          protected virtual void PrepareStart() {}
          protected virtual IEnumerator PrepareStartCountdown() {}
          public virtual void LevelStart() {}
          .... and so on...
      }
  }
  </code></pre>
  
  <p>To avoid update damage I thought of doing things this way</p>
  
  <pre><code>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...
      }
  }
  </code></pre>
  
  <p>I realized that I won`t be able to add any custom methods to the TestLevelManager class this way.</p>
  
  <p>Does anyone have an advice on how to properly organize code?</p>
  
  <p>Is the solution to simply use existing methods in their classes and override only those that already exist, and then to create additional classes for methods I need?
  Sound too dirty that way.</p>
  
  <p>I could end up with:</p>
  
  <ul>
  <li>LevelManager which contains their expected methods,</li>
  <li>TestLevelManager which overrides their LevelManager methods like in example above</li>
  <li>TestLevelManagerExtra that contains all extra methods I need for the game, like</li>
  </ul>
  
  <p>This would be my 3rd example file for Extra Methods I would use
      using MoreMountains.Tools;
      using MoreMountains.InfiniteRunnerEngine;</p>
  
  <pre><code>namespace MyNamespace.Test
  {
  
      public class TestLevelManagerExtra : Singleton&lt;TestLevelManagerExtra&gt;
      {
          // 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&lt;TestLevelManager&gt;();
          }
  
          // 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() {}
      }
  }
  </code></pre>
  
  <p>Sorry for wrong terminology used in asking question, as I said, I'm not good at C#.</p>