正确使用第三方库,unity3d

时间:2018-05-01 10:15:13

标签: c# unity3d

对于任何有经验的开发团队/ c#来说,这应该是一个简单的问题,但是我缺乏经验迫使我去问。

我最近从More Mountains购买了Infinite Runner Engine - 这个脚本应该启动我的项目,但我正在努力......

我正在尝试将他们的代码与我自己的代码分开,所以一旦有更新,我可以轻松地交换它而不会造成(太多)损害。

以下是问题:

我们以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,包含游戏所需的所有额外方法,例如

这将是我将使用的额外方法的第3个示例文件     使用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#。

0 个答案:

没有答案