为了便携性,在游戏引擎的 API 上构建 API 是个好主意吗?

Is it a good idea to build an API over a game engine's API for the sake of portability?

让我先介绍一下上下文背景:

我有兴趣构建一款旨在模块化的游戏。这开始于 Unity3D 中的一个项目。当我编写游戏代码时非常接近 Unity3D 的 API,我想知道,我是否应该为游戏构建自己的 API 以防我 wanted/had 离开 Unity3D将来?(到另一个游戏引擎,或者更好的是,直接使用 OpenGL/DirectX)

然后我有兴趣将我的游戏转移到 Unreal Engine 4,所以我尽力抽象我的游戏,其中大部分明确使用 Unity3D 的 API 到它自己的 API. class 仍然依赖于 Unity3D 的一个例子是我的 Player class (GitHub)

    //Vector and GameObject are both Unity3D classes
    private Player(PlayerID id, Vector position)
    {
        GameObject playerPrefab = Resources.Load<GameObject>("Player");

        playerObject = GameObject.Instantiate(playerPrefab, position, Quaternion.identity) as GameObject;
        playerObject.AddComponent<UnityObjectScript>().Bind = this;
        playerObject.name = "Player " + id.ToString();

        coreObject = playerObject.transform.FindChild("Core").gameObject;
        bodyObject = playerObject.transform.FindChild("Body").gameObject;

        players[(int)id] = this;

        UnityLink(playerObject);
    }

长话短说,我放弃了对已经制作的内容进行抽象并决定重写它。不管怎样,这一切的重点是:

是否值得在已经存在的 API(游戏引擎)之上构建我自己的 API?

虽然我觉得没有任何其他选择可以实现我的 'modular' 游戏愿景,但我制作 API 的主要顾虑是:

Should I have built my own API for the game in case I wanted/had to move off Unity3D in the future?

如果你想在未来离开你现有的游戏引擎,你应该;)如果你不这样做,你就不应该;)

但是添加抽象层肯定会减慢速度。慢的程度取决于您的 API 设计。

Is it 'overkill' to have an API built over another API in my case?

如果您以后不想转移到另一个游戏引擎 - 是的。