Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在游戏引擎上构建一个API是一个好主意吗;为了可移植性,API是什么?_Oop_Optimization_Abstraction - Fatal编程技术网

Oop 在游戏引擎上构建一个API是一个好主意吗;为了可移植性,API是什么?

Oop 在游戏引擎上构建一个API是一个好主意吗;为了可移植性,API是什么?,oop,optimization,abstraction,Oop,Optimization,Abstraction,让我先介绍一下背景知识: 我对构建一个模块化的游戏很感兴趣。这是从Unity3D中的一个项目开始的。当我编写的游戏非常接近Unity3D的API时,我想知道,我是否应该为游戏构建自己的API,以防将来我想/不得不离开Unity3D?(到另一个游戏引擎,或者更好,直接使用OpenGL/DirectX) 然后我对将我的游戏转移到虚幻引擎4很感兴趣,所以我尽我最大的努力抽象我的游戏,其中大部分游戏都明确地将Unity3D的API应用到自己的API中。仍然依赖Unity3D的类的一个示例是myPlaye

让我先介绍一下背景知识:

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

然后我对将我的游戏转移到虚幻引擎4很感兴趣,所以我尽我最大的努力抽象我的游戏,其中大部分游戏都明确地将Unity3D的API应用到自己的API中。仍然依赖Unity3D的类的一个示例是my
Player
class()

//Vector和GameObject都是Unity3D类
私人玩家(玩家id,矢量位置)
{
gameobjectplayerprefab=Resources.Load(“玩家”);
playerObject=GameObject。实例化(playerPrefab、position、Quaternion.identity)为GameObject;
playerObject.AddComponent().Bind=this;
playerObject.name=“Player”+id.ToString();
coreObject=playerObject.transform.FindChild(“核心”).gameObject;
bodyObject=playerObject.transform.FindChild(“Body”).gameObject;
玩家[(int)id]=这个;
UnityLink(playerObject);
}
长话短说,我放弃了对我已经做过的东西进行抽象,决定重写它。无论如何,这一切的意义在于:

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

虽然我觉得似乎没有其他方法可以实现我对游戏的“模块化”愿景,但我对制作API的主要关注点是:

  • 间接费用罚金值不值得(如果有)?或者更确切地说

  • 在我的例子中,在另一个API之上构建一个API是否“过火”

如果我想/不得不这样做,我应该为游戏构建自己的API吗 将来搬离Unity3D

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

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

在我的例子中,在另一个API之上构建一个API是不是“矫枉过正”


如果您以后不想移动到其他游戏引擎-是。

是。对不。按照你喜欢的顺序。你的游戏玩家将看到你构建的游戏,而不是你代码库中的技术抽象。把时间花在构建更好的抽象上不会让你的游戏更有趣。
    //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);
    }