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